「grep -q」と「if [-n/-z]」

「grep -q」と「if [-n/-z]」

こんにちは、dmenuで動作するNetworkManager用の小さなラッパースクリプトがあります。できるだけシンプルで完全にposixになりたいです。

私はshellcheckを使用していますが、次の行に「警告」が表示されます。

...
if [ -z "$(echo "$VAR" | grep "pattern")" ] && [ -z "$(grep -w $OtherVar ~/somefile)" ]
...

grep -qそれはshellcheckは代わりに使用する必要があると言いますが、[ -z ]bashとgrepのマニュアルページを読んでもう一度読んだ後、それはgrep -q実際に私が使用したいものではないようです。それともそうですか?grep -q実際にどのように比較されますか[ -z/-n]

ベストアンサー1

[ -z "$(echo "$VAR" | grep "pattern")" ]出力が空であることを確認する条件を入れますgrep。 grepを使用してgrep -q一致するものがあることを確認してください。

$var正規表現が含まれているかどうかを知りたい場合は、$pattern次のものを使用できます。

if echo "$var" | grep -qe "$pattern"; then
    echo match
fi

あるいはif ! echo ...その逆も。

これは見ている出力とは全く異なりますgrep。理論的には、ゼロ文字からなる文字列と一致するパターンを持つことができるからです。 (ただし、すべての入力と一致することがあります。)

[.. そこにはありません。パイプを条件として直接]使用してください。echo | grep終了ステータスの確認if command注文する[、または他のコマンドです。

おすすめ記事