;の代わりに&&を使用する理由は何ですか?同じ行のコマンドに配置するには?


30

UnixではなくLinuxの専門家でもないので、同じ行で2つのコマンドを文字列化するこれら2つの方法の違いは何だと思いますか?この単純な例では、出力に違いは見られません

Pete$date ; time
Sun Mar 17 19:37:20 EDT 2013

real    0m0.000s
user    0m0.000s
sys 0m0.000s

Pete$date &&time
Sun Mar 17 19:37:46 EDT 2013

real    0m0.000s
user    0m0.000s
sys 0m0.000s

これは問題を引き起こしていません-私はただ興味があります。

回答:


43

&&論理的な「and」です。最初の引数が評価され、2番目の引数は最初の引数がtrueを返す場合にのみ評価されます。その理由は、「false AND something」は常にfalseであるため、この場合は2番目の引数を評価する必要がないためです。

その&&ため、最初のコマンドでエラーが報告された場合は、2番目のコマンドが実行されないことを確認してください(エラーがなかったことを示すtrue終了コード0で表されます)。対照的;に、最初のコマンドの結果に関係なく、両方のコマンドを実行します。

結論:コマンドを連鎖させるの&&は良い習慣です。対照的に;、何か問題が発生した場合、後続のコマンドは実行されません。


あなたはそれが0意味するのtrueか、それとも0真実を意味するのですか?エラーがありますか?
マイケルバトラー

1
@MichaelButler:0はを意味しtrueます。説明を追加しました。
方位角

26

;

以前の終了ステータスに関係なく、コマンドを順次実行します。

# sh -c "exit 0" ; echo "2nd command"
2nd command
# sh -c "exit 1" ; echo "2nd command"
2nd command

&&

論理積

次のコマンドを実行しますが、前のコマンドが成功した場合のみ(終了ステータスが0)でした:

# sh -c "exit 0" && echo "2nd command"
2nd command
# sh -c "exit 1" && echo "2nd command"
#

||

論理和

次のコマンドを実行しますが、前のコマンドが失敗した場合のみ(終了ステータスがでなかった場合 0):

# sh -c "exit 0" || echo "2nd command"
#
# sh -c "exit 1" || echo "2nd command"
2nd command

6
また、sh -c "exit 0"に置き換えることができますtrueこれらの例では、とsh -c "exit 1"false
フリム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.