私は次のif / thenステートメントを見つけました。
if ! foo ; then
echo "blah"
exit 1
fi
具体的にはどういう意味ですかif !
? 「foo
結果が正しくないとどうなりますか?」 「終了コードがfoo
ゼロでなければどうなりますか?」
答え1
!
コマンド終了状態の意味を逆にします。これは非POSIXシェル構文の一部ですif
。POSIX仕様:
予約語なら!パイプラインの前でない終了状態は、パイプラインで指定された最後のコマンドの終了状態でなければなりません。それ以外の場合、終了ステータスは最後のコマンドの終了ステータスを論理的に否定する必要があります。つまり、最後のコマンドが0を返した場合は終了ステータスは1でなければならず、最後のコマンドが0より大きい値を返した場合は終了ステータスは0でなければなりません。
答え2
論理演算子と同等のブール演算子です。いいえ。
バラよりman bash
:
!
式が偽の場合、式は真です。
あなたの例ではfoo
echoそうでない場合blah
。
答え3
他の回答に追加するために、このコードは次のコードを書くのを!
防ぐために使用されます。
if foo ; then
# everything that used to follow "fi" in the previous version
else
echo "blah"
exit 1
fi
存在する場合のみ有効はいfi
空の句if
は無効なためです。 (コメントは含まれません。)
このように書くと、一度のインデントレベルが消費されます。これはハードコアです。構造化プログラミング人々はそれが支払う価値がある価格だと言うでしょう。ソフトウェア開発研究所(Software Development Institute)は、exit
プログラムの中間部分がより良いものではなく、完全に悪いgoto end
ため、goto
追加のネストレベルが改善と言います。
ある競合学校は「はい。画面の右側からすべてのコードを押し出すまでインデントするのは素晴らしいです」と言いました。
その後、両方の陣営には少し奇妙だと思う人がいて、可能な限り否定的なロジックを避けるのが最善です。
クールエイド(Kol-Aid)を選んで飲んでください。