Bash
防止 grep 在不匹配的情況下退出
此腳本不回顯“之後”:
#!/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
總是返回零)。