web-dev-qa-db-ja.com

||何をしますか?バッシュで意味?

投稿が重複している場合はお詫びします。私は誰かがすでにこれを尋ね/答えたかどうかを調べるために検索を試みましたが、何も見つかりませんでした。

Bashで||はどういう意味ですか?たとえば、ドライバーの問題をトラブルシューティングする手順を調査する際に、次のコマンドに遭遇しました。

modprobe -q vmxnet3 && echo "vmxnet3 installed" || echo "vmxnet3 not installed"

最初の部分がmodprobeを照会し、正常な戻りコードを受け取った場合に「vmxnet3 installed」の応答を返すことがわかります...しかし......最後の部分は何をしていますか?

8
Mike B

||は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
9
Jack O'Connor

これは「OR」条件です。

簡単な例として、

 cmd1 || cmd2

Cmd1が成功した場合(つまり、終了コード0)、cmd2は実行されません。 cmd2は、cmd1が失敗した場合にのみ実行されます。

これが、終了コードを返すことが非常に重要である理由の1つです。

ところで、この機能は、古いshにはIFステートメントがなかったため、非常に古いUNIXシェルに存在していました。もちろん、これはcshが存在する前でもありました。

4
mdpc

&&と同様に、||は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コマンドは失敗します。したがって、この違いが問題になることはめったになく、&&および||形式はショートカットとしてよく使用されます。

3
John1024