我有以下测试脚本:
#!/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'循环中的任何内容都要为每个数组元素重复)
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
为什么123最后?
为什么date命令只执行一次而不是每次迭代
我该怎么做才能使每次迭代正常工作.
基本上我想要实现的是编写一个迭代数组列表的脚本,并根据不同的参数执行相同的命令,这些参数取决于数组中当前项的值.我写了上面的脚本试图理解for循环是如何工作的,但我没有得到我期待的输出.
这条线
testArray=(A,B,C,D,E)
创建一个包含单个元素的数组,即字符串'A,B,C,D,E'.数组元素由空格分隔,而不是逗号.使用
testArray=(A B C D E)
您还需要在if
语句中添加空格(从技术上讲,您应该使用=
内部[...]
,而不是==
引用参数扩展):
if [ "${currentValue}" = A ]