3

私はBASHで働いていて、今はばかげた瞬間を過ごしています。非常に基本的な算術式を使用する必要があるというプロジェクトに取り組んでいますが、変数が更新されていないことが問題の多くであることに気づきました。そこで、特定の数に達するまで、whileループを使用して変数を別の変数でインクリメントする基本的なアルゴリズムをまとめました。

counter=1
counter2=0

while [[ counter2 < 10 ]]; do
   counter2=$(($counter2+$counter))
   echo $counter
   echo $counter2
done 

スクリプトを実行します。何もしません。キックの<ためだけにを設定すると、次の繰り返し出力で無限ループが発生します。>

1
0
1
0

私がそれを止めるまで永遠にそして永遠に。したがって、変数が変更されていないことは明らかです。なんで?それは私が見落としている愚かな何かでなければならないので、私はそのようなばかみたいに感じます。そして、なぜ、私が持っているとき<、それも無限ループではないのですか?なぜそれは何も印刷しないのですか?counter2が常に10未満の場合、なぜそれは永遠に続くのではないのですか?

よろしくお願いします。

編集:まあ、私はチェックがであるときにそれが何も出力しなかった理由を理解してい<ます...私は単にの実際の値を取得する$counter2代わりに使用する必要がありました。しかし、今では出力するだけです。counter2counter2

1
2

そして、それはそれです...私はそのようなderpのように感じます。

4

3 に答える 3

4

の内部では$((...))、印章()を使用しないでください$

counter2=$((counter2+counter))
于 2012-04-10T01:50:51.383 に答える
4

これがすべて bash の場合 (100% 確実) declare -i、変数の型を明示的に設定するために使用でき、コードは次のように単純になります。

declare -i counter=1
declare -i counter2=0

while [[ $counter2 -lt 10 ]]; do
   counter2=$counter2+$counter
   echo $counter
   echo $counter2
done

編集:bashでは、二重パラネシスを使用して算術比較を行うことができます。したがって、while は次のように記述できます。

while (($counter2 <  10)) ; do
于 2012-04-10T01:55:02.390 に答える
1

bash では、c のような for ループを使用できます。

for (( counter2=0; counter2<10; counter2+=counter ))
do
   echo $counter": "$counter2
done

多くの場合、この構文を使用する方が魅力的であることがわかります。

for counter2 in {0..9}
do
    echo $counter": "$counter2
done
于 2012-04-10T02:32:30.063 に答える