次のbashコードを考えてみましょう。
i=1
while [ $i -le 50 ]
do
echo $i
i=$(($i+1)) # <-------
done
鋭い線でどのくらいの括弧を使用することがなぜ重要ですか?これを書くと、コードは機能しません。
i=$($i+1)
なぜですか?
答え1
もちろん、これは全く異なります。私たちは集中する強く打つ内蔵機能のみ:
$((...))
算術置換です。算術演算が完了すると、内容全体が式の値に置き換えられます。バラよりhttp://mywiki.wooledge.org/ArithmeticExpression
((...))
式が 0 でない場合は終了状態 0 を返し、式が 0 の場合は 1 を返す算術コマンドです。副作用(割り当て)が必要な場合は、「let」の同義語としても使用されます。バラよりhttp://mywiki.wooledge.org/ArithmeticExpression
コマンドの置き換え:"$(cmd "foo bar")"
"cmd"コマンドは "foo bar"引数で実行され、"$(..)"
出力に置き換えられます。バラよりhttp://mywiki.wooledge.org/BashFAQ/002そしてhttp://mywiki.wooledge.org/CommandSubstitution
ついに
以下より良い/簡単な行を作成できますi=$(($i+1))
。
((i++))
のためloop
:
for i in {1..50}; do ...
または
for ((i=1; i<50; i++)); do ...