【问题标题】:Bash use variables as indexes to arrayBash 使用变量作为数组的索引
【发布时间】:2017-10-19 21:17:57
【问题描述】:

如何在 Bash 中将一个数组元素分配给一个变量,以便数组本身由一个变量索引(在任何语言中都是最微不足道的事情,但在 bash 中似乎很特殊?)

我尝试了许多变体,例如:

let temp1=list1[list1Index]

 temp1=${list1[$list1Index]}

它们都没有明显的作用。没有错误,但 echo $temp1 不显示任何内容 我能做什么?

这里是完整的代码(路径的虚拟名称):

#! /bin/bash
pathFrontalGray='/mnt/c/Users/dummyName/'

list1=('x' 'y' 'z' 'a' 'b' 'c')
prefix1='dummyName'
echo $pathFrontalGray
touch fileNamesGray.txt
ls $pathFrontalGray > fileNamesGray.txt
fileGray='fileNamesGray.txt'
list1Index=0
i=0
while IFS= read -r line
do
    let i=i+1
    echo $i
    #means if NOT divisibe by 9  -> if <expr evaluated to 0> -> equiv if false
    if (($i % 9));then
        let list1Index=list1Index+1
    fi

    temp1=$list1[$((list1Index))]
    echo $temp1
    #mv $pathFrontalGray$line $prefix1${list1[$list1Index]}
    # display $line or do somthing with $line
    #printf '%s\n' "$line"
done <"$fileGray"

【问题讨论】:

  • $array[$((index))]?
  • 您的第二种方法"${arr[$idx]}" 应该可行。向我们展示您的阵列。
  • list1[list1Index] 实际上也可以,如果它是一个非关联数组并且list1Index 的名称是一个包含整数作为值的变量。也就是说 -- (1) 不,这不是“显而易见的”,并且 (2) 我们真的需要在问题中包含 minimal reproducible example,以便其他人可以重现所声称的行为。
  • 为了让任何有兴趣的人测试所询问的行为确实有效,一些可以复制粘贴的代码进行测试:list1Index=2; list1=( "FAIL" "BAD" "GOOD" "NOPE" ); echo "${list1[list1Index]}"
  • 哦。但实际上,temp1=$list1[$((list1Index))] 显然是坏了。正确的语法是temp1=${list1[list1Index]},或者如果你更喜欢temp1=${list1[$list1Index]}temp1=${list1[$((list1Index))]}——但无论如何,你不能省略大括号。

标签: arrays bash variables


【解决方案1】:

我发现了问题。其实我很抱歉

curr1=${list1[index1]}

工作正常。问题是它的回声在许多其他显示的东西中丢失了。带来不便敬请谅解。我想我有点累了……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    相关资源
    最近更新 更多