質問: &&と||の使い方の混乱演算子 私は/etc/rc.d/init.d/sendmailファイルをざっと見ていて(これはほとんど使用されていないことを知っていますが、試験のために勉強しています)、&&演算子と||演算子について少し混乱しました。私はそれらが次のようなステートメントで使用できる場所を読みました:if [ test1 ] && [ test2 ]; then echo "both tests are true" elif [ test1 ] || [ test2 ]; then echo "one test is true" fi ただし、このスクリプトは次のような1行のステートメントを示しています。[ -z "$smqueue" ] && smqueue="queue" [ -f /usr/sbin/sendmail ] || exit 0 これらは、テストに基づいて応答を引き出すために&&および||演算子を使用しているようですが、これらの演算子のこの特定の使用に関するドキュメントを詳しく調べることはできませんでした。誰もがこれらがこの特定の文脈で何をするか説明できますか?
回答: &&の右側は、左側の終了ステータスがゼロ(つまりtrue)の場合にのみ評価されます。 ||は反対です。左側の終了ステータスがゼロ以外(つまりfalse)の場合にのみ右側を評価します。[ ... ]は、戻り値を持つプログラムと見なすことができます。内部のテストの評価がtrueの場合、ゼロを返します。それ以外の場合はゼロ以外を返します。例:$ false && echo howdy! $ true && echo howdy! howdy! $ true || echo howdy! $ false || echo howdy! howdy! 補足:which [を実行すると、[が実際にプログラムを指していることに気付く場合があります。ただし、通常はスクリプトで実行されるものではありません。実際に何が実行されるかを確認するには、type [を実行します。プログラムを使用してみたい場合は、/bin/[ 1 = 1のようにフルパスを指定してください。