私はシェルスクリプトに慣れていて、面白くて説明できない動作を見つけました。次のコードでは、最初のforループは正しく実行されますが、2番目の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
次のエラーでループが発生する第二:コードは、たとえ失敗した私を混乱させる何
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 ...などに拡張されます。 あなたが{0 .. $ {#letters [ ]}これは文字列に展開されます "{0..7}"あなたは反復できません – Yarden