主人 :
root@xxx:/# [ "`date | grep 20 | echo $?`" -gt "0" ] && echo 12
root@xxx:/# [ "`date | grep 20 | echo $?`" -gt "0" ] && echo 12
12
root@xxx:/# [ "`date | grep 20 | echo $?`" -gt "0" ] && echo 12
root@xxx:/# [ "`date | grep 20 | echo $?`" -gt "0" ] && echo 12
12
root@xxx:/# [ "`date | grep 20 | echo $?`" -gt "0" ] && echo 12
root@xxx:/# [ "`date | grep 20 | echo $?`" -gt "0" ] && echo 12
12
これは、すべての行に12をエコーが、奇数ラインのみでそうすべきです。どうして?直し方?
そのほかの男:
あなたはそれを想定しているfoo | echo $?
の終了ステータスが表示されますfoo
。これはそうではありません。その代わりに、前のコマンドまたはパイプラインの終了ステータスが示しています。
$ bash -c 'exit 42'
$ true | echo $?
42
あなたのコマンドは、したがって、この1のようにフリップフロップ:
$ [ $? = 1 ] && echo "Boop"
$ [ $? = 1 ] && echo "Boop"
Boop
$ [ $? = 1 ] && echo "Boop"
$ [ $? = 1 ] && echo "Boop"
Boop
あなたが意図して抑制するためにだったgrep
(ここで行わ出力-q
(後の第二のコマンド追加し)、および;
値を書き出すことができます):
# Check for success when running a command and writing out
# the exit status and capturing it and comparing it to success
[ "`date | grep -q 20; echo $?`" -gt "0" ] && echo 12
ただし、すべての冗長性をドロップすると、ちょうど行うことができます。
# Check for success when running a command
date | grep -q 20 && echo 12