171

私は通常;、複数のコマンドを 1 行に組み合わせて使用​​しますが、&&. 違いはありますか?例えばcd ~; cd -​​とcd ~ && cd -は同じものを作っているようです。Android のシェルなどの bash サブセットでサポートされるなど、より移植性の高いバージョンはどれですか?

4

7 に答える 7

236

前のコマンドが失敗し;た場合、2 番目のコマンドが実行されます。

しかし&&、2番目のものでは実行されません。

これは、演算間の「怠惰な」論理「AND」オペランドです。

于 2011-05-27T13:15:40.277 に答える
66

私が使用して&&いるのは、ずっと前に近くのコンピューターで:

root# pwd
/
root# cd /tnp/test; rm -rf *
cd: /tnp/test: No such file or directory
...
... and after a while ...
...   
^C

しかし、助けにはなりませんでした... ;)

cd /tnp/test && rm -rf *安全です... ;)

于 2011-05-27T18:33:39.427 に答える
28

ではcmd1 && cmd2、成功cmd2した場合にのみ実行されます (0 を返します)。cmd1

ではcmd1 ; cmd2cmd2どのような場合でも実行されます。

どちらの構造も POSIX 準拠のシェルの一部です。

于 2011-05-27T13:12:44.233 に答える
18

&&前のコマンドがステータス 0 で終了した場合に次のコマンドを実行することを意味します。逆に、||前のコマンドが 0 以外のステータスで終了した場合に実行されるようにするには、;常に ie を使用します。

前のコマンドが正常に終了したかどうかに応じて、特定のアクションを実行する必要がある場合に非常に便利です。

于 2011-05-27T13:14:46.763 に答える
8

で区切られたコマンド;は、完了ステータスに関係なく順次実行されます。

を使用&&すると、最初のコマンドが正常に完了した場合にのみ、2 番目のコマンドが実行されます (終了ステータス 0 が返されます)。

これについては、bash のマンページの で説明されていListsます。Unix ライクなシェルはこれらの演算子の両方をサポートすると思いますが、Android シェルについては特に知りません。

于 2011-05-27T13:13:18.137 に答える
3

&&;常に 2 番目のコマンドが実行されている間に、条件付き実行が可能になります。

たとえばcommand1 && command2、は が で終了しcommand2た場合にのみ実行され、すべてがうまくいったことを通知しますが、2 番目のコマンドでは、結果がどうであれ常に実行されます。command1exit 0command1 ; command2command1

于 2011-05-27T13:15:11.617 に答える
2

&&はbashの論理積です。Bashには論理積の短絡評価があります。このイディオムは、以下を表現するためのより簡単な方法です。


cmd1;rc=$?
if [ $rc -eq 0 ]; then
   cmd2
fi

一方、; バージョンは単に:


cmd1
cmd2
于 2011-05-27T15:48:24.470 に答える