投稿が重複している場合はお詫びします。私は誰かがすでにこれを尋ね/答えたかどうかを調べるために検索を試みましたが、何も見つかりませんでした。
Bashで||
はどういう意味ですか?たとえば、ドライバーの問題をトラブルシューティングする手順を調査する際に、次のコマンドに遭遇しました。
modprobe -q vmxnet3 && echo "vmxnet3 installed" || echo "vmxnet3 not installed"
最初の部分がmodprobeを照会し、正常な戻りコードを受け取った場合に「vmxnet3 installed」の応答を返すことがわかります...しかし......最後の部分は何をしていますか?
||
はOR演算子です。左側のコマンドがエラーを返した場合にのみ右側のコマンドを実行します。- https://unix.stackexchange。 com/a/24685/23305 。
あなたの例は正しいbashではないと思います。 ||
の右側の部分にecho
コマンドがありません:
> true && echo "worked" || echo "didn't work"
worked
> false && echo "worked" || echo "didn't work"
didn't work
> false && echo "worked" || "didn't work"
bash: didn't work: command not found
これは「OR」条件です。
簡単な例として、
cmd1 || cmd2
Cmd1が成功した場合(つまり、終了コード0)、cmd2は実行されません。 cmd2は、cmd1が失敗した場合にのみ実行されます。
これが、終了コードを返すことが非常に重要である理由の1つです。
ところで、この機能は、古いshにはIFステートメントがなかったため、非常に古いUNIXシェルに存在していました。もちろん、これはcshが存在する前でもありました。
&&
と同様に、||
はbashです制御演算子:
&&
は、次のステートメントを実行することを意味します次の場合のみ前のステートメントが正常に実行されました(終了コード0が返されます)。
||
は、次のステートメントを実行することを意味します次の場合のみ前のステートメントが失敗しました(ゼロ以外の終了コードが返されました)。
他のいくつかの制御演算子は次のとおりです。
&
は、前のステートメントをバックグラウンドで実行することを意味します。
;
は、前のステートメントを実行し、それが完了したら、次のステートメントに進むことを意味します。
|
は、先行するステートメントを実行し、そのstdoutを後続のステートメントのstdinに接続することを意味します。
&&
と||
の組み合わせ&&
と||
を組み合わせて、if-then-elseの代わりにすることができます。考慮してください:
if some_command
then
echo yes
else
echo no
fi
上記は次のようになります。
some_command && echo yes || echo no
echo yes
コマンドが失敗した場合の2つは異なるため、同一ではなく「類似」と言いました。 echo yes
コマンドが失敗した場合(ゼロ以外の戻りコードで終了)、echo no
コマンドが実行されます。これは、if-then-else-fi
バージョンでは発生しません。ただし、ターミナルで書き込みエラーが発生した場合のみ、echo
コマンドは失敗します。したがって、この違いが問題になることはめったになく、&&
および||
形式はショートカットとしてよく使用されます。