Bash

防止 grep 在不匹配的情況下退出

  • November 21, 2020

此腳本不回顯“之後”:

#!/bin/bash -e

echo "before"

echo "anything" | grep e # it would if I searched for 'y' instead

echo "after"
exit

如果我刪除了 shebang 行上的選項,它也會如此-e,但我希望保留它,以便在出現錯誤時我的腳本停止。我不認為 grep 找不到匹配項是錯誤。我怎樣才能防止它突然退出?

echo "anything" | { grep e || true; }

解釋:

$ echo "anything" | grep e
### error
$ echo $?
1
$ echo "anything" | { grep e || true; }
### no error
$ echo $?
0
### DopeGhoti's "no-op" version
### (Potentially avoids spawning a process, if `true` is not a builtin):
$ echo "anything" | { grep e || :; }
### no error
$ echo $?
0

“||” 意思是“或”。如果命令的第一部分“失敗”(意味著“grep e”返回非零退出程式碼),那麼“||”之後的部分 被執行,成功並返回零作為退出程式碼(true總是返回零)。

引用自:https://unix.stackexchange.com/questions/330660