我有如下代码,Array没有将值传递给for循环。
echo "rops is ${rops[*]}"
for i in ${rops[*]}
do
if [[ ${rops[i]} == 4000 ]]; then
echo "issue there"
fi
done
+ echo 'rops is 931
32
32'
rops is 931
32
32
+ for i in '${rops[*]}'
+ [[ '' == 4000 ]]
+ for i in '${rops[*]}'
+ [[ '' == 4000 ]]
+ for i in '${rops[*]}'
+ [[ '' == 4000 ]]
-Thanks。
答案 0 :(得分:0)
问题是i
包含数组中的值,而不是数组的索引。
也就是说,第一次i
为931
,然后是32
,然后是31
,但您没有元素${rops[931]}
, ${rops[32]}
或${rops[31]}
,因此shell会为您提供一个空字符串作为${rops[i]}
的值(无论如何都应为${rops[$i]}
)。因此,shell有多种原因可以解决它的问题。
rops=(931 32 31)
echo "rops is ${rops[*]}"
for i in ${rops[*]}
do
echo "i = $i"
if [[ "${rops[$i]}" == 4000 ]]; then
echo "issue there"
fi
done
使用bash
运行时,会产生:
rops is 931 32 31
i = 931
i = 32
i = 31
间距的差异表明你没有像这段代码那样初始化数组;你以某种方式获得了与数组元素相关的换行符。
使用符号for i in ${rops[*]}
(或for i in "${rops[@]}"
,这在多个级别上更好 - 尝试使用值中有空格的数组元素来查看原因)给出数组中的元素。如果您真的想要索引,则需要阅读arrays上的Bash手册并使用:
rops=(931 32 31)
echo "rops is ${rops[*]}"
echo "indexes are ${!rops[*]}"
for i in "${!rops[@]}"
do
echo "i = $i; rops[$i] = ${rops[$i]}"
if [[ "${rops[$i]}" == 4000 ]]; then
echo "issue there"
fi
done
示例输出:
rops is 931 32 31
indexes are 0 1 2
i = 0; rops[0] = 931
i = 1; rops[1] = 32
i = 2; rops[2] = 31