こんにちは、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
ディレクトリの残りの部分を繰り返し、データがメモリに読み込まれるのを防ぎ、よりクリーンで一致する最初の行で停止します。