【发布时间】:2020-06-24 15:50:47
【问题描述】:
我有一个包含多行的数组,我想在 for 循环中选择数组的特定行。然后在for循环中使用所选行中的数据进行一些分析。
ARRAY=(A1,A2
B1,B2
C1,C2)
当我应用以下代码时,我可以将“B1”分配给 Trait1,将“B2”分配给 Trait2。这也适用于 j=1 或 j=3。
j=2
echo ${ARRAY[$j-1]}
Trait1="$(echo ${ARRAY[$j-1]} | cut -d',' -f1)"
Trait2="$(echo ${ARRAY[$j-1]} | cut -d',' -f2)"
echo $Trait1
echo $Trait2
最后,我想把上面的代码放在一个 for 循环中。但这失败了。
nLine=3
for j in $(eval echo "{1..$nLine}")
do
Trait1="$(echo ${ARRAY[$j-1]} | cut -d',' -f1)"
Trait2="$(echo ${ARRAY[$j-1]} | cut -d',' -f2)"
echo $Trait1
echo $Trait2
done
-bash: 1 2 3-1: syntax error in expression (error token is "2 3-1")
-bash: 1 2 3-1: syntax error in expression (error token is "2 3-1")
谢谢。
【问题讨论】:
-
为什么不只是
${ARRAY[j]}或${ARRAY[$j]}?它们是“线”,顺便说一下,它们是独立的元素,所以${ARRAY[0]}是A!,A2,${ARRAY[1]}是B1,B2,等等。 -
当你访问一个没有索引的数组时,它相当于
${ARRAY[0]} -
这里没有shell分词的换行符
-
谢谢大家。我可以在 for 循环之外使用数组索引运算符。但是,当我按照修改后的问题中的说明将相同的代码放入循环时出现错误。
-
更新/编辑的
for循环代码块对我有用(生成A1\nA2\nB1\nB2\nC1\nC2);你运行的是什么版本的bash? (bash --version)