web-dev-qa-db-ja.com

コマンドの出力にシェルスクリプト内の特定の文字列が含まれているかどうかを確認する

私はシェルスクリプトを書いています。コマンドの出力に特定の文字列が含まれているかどうかを確認しようとしています。おそらくgrepを使用する必要があると考えていますが、どのようにすればよいかわかりません。誰か知っている?

80
user1118764

Grepの戻り値をテストします。

./somecommand | grep 'string' &> /dev/null
if [ $? == 0 ]; then
   echo "matched"
fi

これは次のように慣用的に行われます:

if ./somecommand | grep -q 'string'; then
   echo "matched"
fi

また:

./somecommand | grep -q 'string' && echo 'matched'
63
perreal

テスト$?はアンチパターンです

if ./somecommand | grep -q 'string'; then
  echo "matched"
fi
131
mat

別のオプションは、コマンド出力で正規表現の一致をチェックすることです。

例えば:

[[ "$(./somecommand)" =~ "sub string" ]] && echo "Output includes 'sub string'"
0
Noam Manos