【发布时间】: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))]}——但无论如何,你不能省略大括号。