「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注文する[、または他のコマンドです。

答え2

~によるとウィキペディア

[ -z "$( grep -w ..) ]このgrepは、決定を下す前にファイル全体を繰り返し、一致するすべての行をメモリに読み込みます。

grep -qディレクトリの残りの部分を繰り返し、データがメモリに読み込まれるのを防ぎ、よりクリーンで一致する最初の行で停止します。

関連情報