我正在習慣使用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