zig*_*ggy 1 unix linux bash shell
我有以下测试脚本:
#!/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
Run Code Online (Sandbox Code Playgroud)
当我测试它时,我得到的输出是
Processing A,B,C,D,E
Current loop A,B,C,D,E 123
Mon Dec 2 20:33:26 GMT 2013
Run Code Online (Sandbox Code Playgroud)
看起来Bash中的'for'循环在某种程度上与我习惯的不同,因为我期待以下输出(即,'for'循环中的任何内容都要为每个数组元素重复)
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
Run Code Online (Sandbox Code Playgroud)
基本上我想要实现的是编写一个迭代数组列表的脚本,并根据不同的参数执行相同的命令,这些参数取决于数组中当前项的值.我写了上面的脚本试图理解for循环是如何工作的,但我没有得到我期待的输出.
这条线
testArray=(A,B,C,D,E)
Run Code Online (Sandbox Code Playgroud)
创建一个包含单个元素的数组,即字符串'A,B,C,D,E'.数组元素由空格分隔,而不是逗号.使用
testArray=(A B C D E)
Run Code Online (Sandbox Code Playgroud)
您还需要在if语句中添加空格(从技术上讲,您应该使用=内部[...],而不是==引用参数扩展):
if [ "${currentValue}" = A ]
Run Code Online (Sandbox Code Playgroud)