回答:
!コマンドの開始時の孤独は、コマンドまたはパイプラインの終了ステータスを無効にします0。コマンドが終了する場合、それは反転1(失敗)し、ゼロ以外で終了する場合、それは0(成功)終了に変わります。
この使用法は、Bashのマニュアルに記載されています。
予約語「!」パイプラインに先行する場合、終了ステータスは、上記のように終了ステータスの論理否定です。
!なし次のコマンドでは何もして真を返す(に相当しない、空のコマンド、否定コマンドを)。したがって、trueをfalseに反転し、ステータス1で終了しますが、エラーは発生しません。:
また!、testおよび[[コマンド内には、条件付きテストを無効にする他の用途もあります。これらはあなたが見ているものとは無関係です。あなたの質問とそれらのケースの両方で、それ!は歴史の拡大とは関係がなく、他の用語から分離されています。
bashのマニュアルセクション3.2.2パイプラインに記載されている単一の感嘆符を見つけることができます
予約語「!」パイプラインに先行する場合、終了ステータスは、上記のように終了ステータスの論理否定です。
$ ! true; echo $?
1
$ ! false; echo $?
0
セクション3.2.4.2条件付き構成
!表現
式が偽であれば真。
セクション4.1 Bourne Shell Builtins
!expr
exprが偽であれば真。
また!、スペース、タブ、行末、「=」または「(」(extglobシェルオプションがshoptビルトインを使用して有効になっている場合)が後に続かない限り、履歴置換が開始されることに注意してください。
!は比較に使用され、NOTを意味するためです。
例えば:
a=3
b=2
[ $a -eq $b ] && echo "Equal"
[ ! $a -eq $b ] && echo "Not equal"
# of cause last comparison is possible to write as:
[ $a -eq $b ] || echo "Not equal"
[ $a -eq $b ]
echo $?
1
[ ! $a -eq $b ]
echo $?
0
!は、testコマンドの引数としての意味(bashの組み込みバージョンを含む)であり、!コマンドの位置で使用される場合の意味ではありません。
! [...]この場合、質問に一致する必要があります。
[]がわかっていましたtest。私は少し急いでいます。
!履歴展開式の「開始」を示します。