man grep
によると ページ、-c
フラグは
-c, --count 通常の出力を抑制します。代わりに、入力ファイルごとに一致する行の数を出力します。
したがって、表示されているのは一致の数であり、 grep
の終了コードと混同しないでください マッチ。コード 1
入力から一致する行がないためです。
他のケースを見てください。
echo 'No' | grep -c No
1
echo $?
0
EXIT CODES
についても読む man grep
で ページ、
終了ステータス 通常、行が選択されている場合の終了ステータスは 0、行が選択されていない場合は 1、エラーが発生した場合は 2 です。
grep で何も一致しなかったため、終了コードは 1 です。
<ブロック引用>終了ステータス選択した行が見つかった場合、終了ステータスは 0 であり、見つからない場合は 1 です。エラーが発生した場合、終了ステータスは 2 です (注:POSIX エラー処理コードは '2' 以上をチェックする必要があります)。
'Total' のカウントが 0 であるため、出力は 0 です。これは -c オプションによるものです:
<ブロック引用>-c, --count 通常の出力を抑制します。代わりに、入力ファイルごとに一致する行の数を出力します。 -v, --invert-match オプション (下記参照) を使用すると、一致しない行をカウントします。 (-c は POSIX で指定されています。)
終了コード 0 を強制したい場合は、 || true
を追加するだけです あなたの命令に:
echo 'Total' | grep -c No || true