4

bashでは、&&演算子を使用して2つのコマンドを実行できます。例えば:

./foo && ./bar

最初にを実行しfoo、fooが「成功」した場合にのみ、を実行しbarます。ただし、これは、Cプログラムが慣例により、0を返すか、正常に完了すると、オペレーターexit(0)の動作に反直観的に実行されることを考えると、直観に反しているように見えます。&&(ほとんどの言語では、0は「falsey」と見なされるため、2番目のステートメントの実行を停止します。)何が欠けていますか?

4

3 に答える 3

7

0が偽であり、他のすべてが真であるというC言語の規則は、まさにその規則です。Bash(および一般的なUNIXシェル)では、反対の規則を使用します。0は真、それ以外は偽です。

$ if ( exit 0 ); then echo true; else echo false; fi
true
$ if ( exit 1 ); then echo true; else echo false; fi
false
$ if ( exit 2 ); then echo true; else echo false; fi
false

このため、trueコマンドは常にステータス0でfalse終了し、ステータス1で終了します。

$ true; echo $?
0
$ false; echo $?
1

これは、C規則に慣れている人にとってはかなり戸惑うかもしれませんが、シェルの用語では、truth = success = zero exit status、false = failure = nonxeroexitstatusの方がはるかに理にかなっています。

于 2012-07-30T05:30:57.383 に答える
5

あなたは何も見逃していません。それを覚えておく必要がtrueありfalseますが、これはシェルの基本的な概念ではありません。successfailureです。

于 2012-07-30T01:16:11.063 に答える
2

Bashの&&演算子が次のように定義されていることを見逃しています。

command1 && command2
command2は、 command1が終了ステータス0を返した場合にのみ実行されます。

于 2012-07-30T01:13:19.053 に答える