1つの他のすべてのコールを動作するかどうかとgrepなぜbashスクリプトを使用して?

主人 :
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

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=6824&siteId=1