我有以下测试脚本:
#!/bin/sh
testArray=(A,B,C,D,E)
currentValue=''
tempValue=x
for i in "${testArray[@]}"
do
currentValue=$i
echo "Processing " ${currentValue}
if [ ${currentValue}==A ]
then
tempValue="$i 123"
else
tempValue=$i
fi
echo "Current loop " ${tempValue}
echo `date`
done
当我测试它时,我得到的输出是
Processing A,B,C,D,E
Current loop A,B,C,D,E 123
Mon Dec 2 20:33:26 GMT 2013
看起来Bash中的'for'循环以某种方式与我习惯的方式有所不同,因为我期待以下输出(即,'for'循环中的每个数组元素都要重复)< / p>
Processing A
Current loop A 123
Mon Dec 2 20:29:44 GMT 2013
Processing B
Current loop B
Mon Dec 2 20:29:45 GMT 2013
Processing C
Current loop C
Mon Dec 2 20:29:46 GMT 2013
Processing D
Current loop D
Mon Dec 2 20:29:47 GMT 2013
Processing E
Current loop E
Mon Dec 2 20:29:48 GMT 2013
基本上我想要实现的是编写一个迭代数组列表的脚本,并根据不同的参数执行相同的命令,这取决于数组中当前项的值。我写了上面的脚本试图理解for循环是如何工作的,但我没有得到我期待的输出。
答案 0 :(得分:10)
这一行
testArray=(A,B,C,D,E)
创建一个包含单个元素的数组,即字符串'A,B,C,D,E'。数组元素由空格分隔,而不是逗号。使用
testArray=(A B C D E)
您还需要在if
语句中添加空格(从技术上讲,您应该在=
内使用[...]
,而不是==
,并引用参数扩展):
if [ "${currentValue}" = A ]
答案 1 :(得分:2)
另一种方式
将您的循环更改为:
for i in `echo ${testArray} | tr "," " "`
由chepner建议将条件声明更改为:
if [ "${currentValue}" = A ]