Shell-Script

“grep -q”與“如果-n/-z−n/−和-n/-z'

  • September 8, 2020

嗨,我有一個適用於 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*``[

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