1. ホーム
  2. bash

[解決済み] コマンド出力が特定の文字列を含んでいるかどうかを(1行で)テストするには?

2023-07-31 08:25:57

質問

bashの1行で、以下の出力があった場合、どのように終了ステータス0を返すのですか? /usr/local/bin/monit --version の出力が正確に 5.5 を含むとき、終了ステータスが 1 になるのですか?

どのように解決するのですか?

! /usr/local/bin/monit --version | grep -q 5.5

( grep は、マッチした場合は0、そうでない場合は1を終了ステータスに返します。また -q オプション、 "quiet" は、見つかったマッチを表示しないようにします。 grep に対して、その戻り値だけが必要であると伝えます。つまり ! はパイプライン全体の終了ステータスを反転させます)。

を追加するように編集しました。 あるいは、これを "純粋な Bash" で行いたい場合、( grep を呼び出すのではなく)、書くことができます。

[[ $(/usr/local/bin/monit --version) != *5.5* ]]

( [[...]] で説明しています。 の§3.2.4.2 "条件付き構成要素"で説明されています。 Bashリファレンスマニュアル . *5.5* は、fileglob と同じように、0 個以上の文字に加え 5.5 は0文字以上、プラス0文字以上)