コマンド プロンプトで bash で次の操作を行うとします。
cmd1;cmd2;cmd3
失敗した場合cmd1
、どうすれば bash が実行されなくなりますかcmd2
。
cmd1 && cmd2 && cmd3
説明
実行しcmd1
ます。失敗した場合は実行さcmd2
れcmd3
ません。
なんで?falseは、他のものとの論理積が常にfalseに等しいため、falseをcmd1
返す場合はandを評価する必要はありません。同様の理由で、成功して失敗した場合は、実行しないでください。cmd2
cmd3
cmd1
cmd2
cmd3
ノート
ややこしいことに、POSIX システム (Linux やその他の UNIX バリアントなど) は、成功の場合は 0 を返し、失敗の場合はゼロ以外を返します。
だから、上で失敗と言うと
false =ゼロ以外=失敗
true =ゼロ=成功
なんで?リターンコードの数値が使用されるため、異なる障害コードを示します。
例えば、
$ ls /root
ls: cannot open directory /root: Permission denied
$ echo $?
2
$ asdf
asdf: command not found...
$ echo $?
127
$ ls /
bin boot data dev etc home lib ...
$ echo $?
0
ls
軽微な問題の場合は「1」を返し、より深刻な問題の場合は「2」を返します。bash シェルは、「コマンドが見つからない」ことを示すために「127」を返し、成功ls /
を示すために「0」を返します。