我有一个非常愚蠢的问题,但我只是想确认一下。我也使用以下代码对其进行了内部测试。
for x in ${!test_array[@]}
do
echo hey
done
所以我的问题是,显然,for
如果数组为空,循环将简单地忽略“doing”和“done”之间的任何内容。我已经测试过它,如果数组为空,则echo hey
永远不会运行,这意味着脚本永远不会在do ..
和内做任何事情done
。如果数组至少有一个元素,那么它将运行echo hey
。
我只是想确认一下我的理解是否正确。我的意思是,从我的测试看来,确实是这样。
答案1
你的理解是正确的。 for 循环将执行do
和之间的代码done
为了中的每一项字。如果里面没有任何物品字那么就没有什么可以循环的了。
但是如果你省略用言语来说总的来说,它将循环遍历位置参数。
例如
$ set -- one two
$ for f; do echo $f; done
one
two
答案2
对,那是正确的。这样想:如果你在一个儿童聚会上,我告诉你每个穿蓝色衬衫的孩子都应该得到一块饼干,那么如果没有孩子穿蓝色衬衫,你就永远不会打开饼干罐。
在这里,您告诉 shell 对数组的每个元素执行某些操作,并且由于没有元素,因此它甚至不会进入循环。