bashは次のコードをどのように計算しますか?

bashは次のコードをどのように計算しますか?

この質問には2つの部分があります。

(a) 切り捨てられたコードが何をするかを理解する。

(b) 両者の違いを理解する終了ステータスそして返品ステータスin... 壁紙bash.

私が理解しようとしているコードスニペットは次のとおりです。

if var=-2 && (( var+=2 ))
then
    echo "True"
else
    echo "False"
fi

これを実行すると、Falseなぜこれが起こるのか理解できません。

私が正しく理解した場合、これが起こる可能性がありますif

(a)var=-2割り振りが成功したため終了ステータス 0 を生成します。

(b)(( var+=2 ))の値に2を加えると、var式は0と評価されます。したがって、この学期の終了ステータスは1です。

if(c) 0 && 1 は 0 というプレゼンス状態を生成し、コンストラクタによって使用されます。

コンストラクタはif単に終了ステータスを確認する必要があり、終了ステータスが0の場合は次のことを行います。それから道。上記の(c)ステップでは0ですが、スクリプトはまだその他道。これがこれを理解する正しい方法ですか?

bashまた、以下を使用してさまざまなテキストを表示し続けます。終了ステータスそして返品ステータス交換可能です。

var=-2プログラムではないため、課題がどのような終了状態を持つのか疑われます。しかし、2つの違いの説明があれば良いでしょう。

ベストアンサー1

それは:

if
  first list of commands
then
  second list of commands
else
  third list of commands
fi

最初のコマンドリストが返されると、2番目のコマンドリストが実行されます。本物/成功(0) 終了ステータス、つまり最後のコマンド実行が終了ステータス 0 を返しました。

存在する:

var=-2 && ((var += 2))

成功しなければ走らないところですcmd1 && cmd2cmd2cmd1

var=-2

$var読み取り専用に設定されていない限り、通常は成功するため、次の((var += 2))コマンドが実行されます。

((arithmetic expression))

商品を返す成功/本物式が正しく評価され(構文エラーなし)、式の結果がゼロでない限り。

  • ((123))、、真を((1 + 1))返す((1 == 1))
  • ((0))、、falseを返します((-2 + 2))((2 == -2))
  • ((4294967296 * 4294967296))64ビット整数のラップのため、ほとんどのシェルでfalseを返します。

var += 2算術式で割り当てが実行され、割り当てられた値(ここでは0)として解釈されます。間違った終了ステータス。

算術拡張構文を使用して、終了状態に応じた値を表示できます$((...))

$ echo "$((1 + 1)) $((2 == 2)) $((2 == -2)) $((var = -2)) $((var += 2))"
2 1 0 -2 0

または変数に割り当てます。

$ var=-2; ((result = (var += 2)))
$ echo "$? $result $var"
1 0 0

$?前のコマンドの終了ステータスを含みます。if///つまり、0はtrueを表しthen、その他の値はfalseを表しますelsefi

ここでの混乱は、算術式の場合はその逆であるという事実に由来します。つまり、0偽を意味し、他のものは真を意味します(例:2 == 2is 1while 2 < 1is 0)。

違いを心配しない場合は、$?可能な値を忘れてください。ブール値の観点から考えてみてください。本物/間違った成功/失敗する

 grep -q foo file

fooで見つかった場合はtrueを返しますfile

 [ "$a" = "$b" ]

$aと同じ内容が含まれている場合はtrueを返します$b

 ((6 * 3 - 12))
 ((4 == 1))

算術式の結果がゼロ以外の数値の場合はtrueを返します。

そのようなものは関係ありません。本物/間違ったgrepこれらの/[コマンドまたは構文の終了ステータス0または1として表示されます((...))

おすすめ記事