Bashスクリプトで変数をインクリメントしようとしていますが、機能しません。これが私のコードです:
#! /bin/bash
COUNTER=0
while [ $COUNTER -lt 5 ]
do
echo "i will add this line to file mycreation">>./myfile
COUNTER = `expr $COUNTER + 1`
done
COUNTER
割り当てを囲む引用符はバッククォートです。
COUNTER
を$COUNTER
に次のように置き換えてみました。
$COUNTER = `expr $COUNTER + 1`
しかし、それでは問題は解決せず、次のエラーが発生しました。
line7: 0: command not found.
@ Cory が正しく指摘しているように、等号の前後にスペースを入れないでください。スペースを入れないと、bashがコマンドのCOUNTER
を混乱させます。
COUNTER=$(expr $COUNTER + 1)
そうは言っても、次の方法を使用することで、bashforkのサブプロセスを回避できます。
bash組み込みの 'let'コマンド の使用:
let COUNTER="COUNTER + 1"
または、bash cスタイルの式を使用します。
(( COUNTER++ ))
実際、whileループは次のように書くことができます。
for ((COUNTER=0; COUNTER <= 5 ; COUNTER++))
do
echo "i will add this line to file mycreation">>./myfile
done
エラーが発生したとき:
line 7: 0: command not found.
'-----' '--' '------------------'
| | |
location | Description of error.
culprit
私の推測では、7行目にあったものは
$COUNTER = `expr $COUNTER + 1`
-------- --------------------
| |
Evaluated to 0 |
Evaluated to 1
最終的にbashに表示されるのは0 = 1
であり、bashステートメントは通常command arg1 arg1 ...
の形式であるため、bashはそれを引数0
を指定してコマンド= 1
を実行すると解釈します。したがって、エラーメッセージ:0: command not found
。
等号の周りのスペースを削除すると、bashが解釈するのは次のとおりです。
0=1
これは、引数なしでコマンド0=1
を実行することを意味するため、エラー0=1: command not found
になります。
変数の割り当てはVAR_NAME=VALUE
($
なし)の形式である必要があるため、使用する構文は次のとおりです。
COUNTER=`expr $COUNTER + 1` # or any of the variants above
どのbashが評価し、最終的に次のように解釈します。
COUNTER=2
等号の周りのスペースを削除します。
COUNTER=`expr $COUNTER + 1`
別の方法。
COUNTER=$(($COUNTER + 1))
for i in {0..4}; do
echo "i will add this line to file mycreation" >> ./myfile
done