Shell-Script
“grep -q”與“如果-n/-z−n/−和-n/-z'
嗨,我有一個適用於 dmenu 的 NetworkManager 的小包裝腳本,我希望它盡可能簡單,並希望完全 posix。
我正在使用 shellcheck,它給了我關於這一行的“警告”:
... if [ -z "$(echo "$VAR" | grep "pattern")" ] && [ -z "$(grep -w $OtherVar ~/somefile)" ] ...
它(shellcheck)說我應該使用
grep -q
而不是,[ -z ]
但是在閱讀(和重新閱讀)bash 和 grep 的兩個手冊頁之後,它似乎grep -q
實際上並不是我想要使用的,或者是嗎?和grep -q
實際相比如何[ -z/-n]
?
設置條件
[ -z "$(echo "$VAR" | grep "pattern")" ]
檢查輸出grep
是否為空。使用grep -q
檢查 grep 是否匹配任何內容。如果您想知道是否
$var
包含正則表達式$pattern
,您可以使用if echo "$var" | grep -qe "$pattern"; then echo match fi
或
if ! echo ...
相反的情況。這與查看 的輸出嚴格不同
grep
,因為理論上您可能有一個匹配零字元字元串的模式……(但它可能會匹配任何輸入。)請注意,那裡沒有
[
..]
,我們echo | grep
直接使用該管道作為條件。檢查command的退出狀態,可以是,或者其他命令。if *command*``[