我正在习惯使用shell脚本,并且遇到了一个我发现有趣和无法解释的行为。在下面的代码中,第一个for循环将正确执行,但第二个不会。Bash for循环语法
declare letters=(a b c d e f g)
for i in {0..7}; do
echo ${letters[i]}
done
for i in {0..${#letters[*]}}; do
echo ${letters[i]}
done
以下错误第二个for循环的结果:
syntax error: operand expected (error token is "{0..7}")
什么让我困惑的是,${#letters[*]}
显然得到评估,正确,到7号。但尽管如此,代码失败,即使我们刚刚看到与{0..7}
相同的循环完美无缺。
这是什么原因?
我正在运行OS X 10.12.2,GNU bash版本3.2.57。
不确定关于此的解释 但是,当您使用{0..7}时,它将扩展为 1 2 3 4 5 ... etc 但是当您{0 .. $ {#letters [* ]}这扩展为一个字符串 “{0..7}”你不能迭代 – Yarden