2017-02-15 1 views
7

私は、次の1Linuxのgrepのリターンコード

echo 'Total' | grep -c No 
0 

のコードので、「いいえ」「合計」に存在していないを返している理由を確認するために苦労しています。しかし、リターンコードを参照すると、1と表示されます。

echo $? 
1 

なぜリターンコードが1になっていますか?これを回避する方法はありますか?

man grep
+0

'grep'は、文字列が一致したときにのみゼロを返します。このルールは 'grep -c'にも適用できます。 –

答えて

7

ページによれば、-cフラグが

-c、--count 抑止正常出力するためのものです。代わりに各入力ファイルの一致する行数を表示します。

だからあなたが見ているのは試合の数であり、grepの終了コードと混同しないでください。コード1は、入力と一致する行がないためです。

、行が選択されている場合は終了ステータス は通常、終了ステータスが0である

EXIT CODES man grep上のページで読むことも

echo 'No' | grep -c No 
1 

echo $? 
0 

、他のケースを見てください1行が選択されなかった場合はエラー、エラーが発生した場合は2です。

6

grepと一致するものがないため、終了コードは1です。

終了ステータス 終了ステータスは、選択された行が見つかると0、見つからない場合は1です。 エラーが終了ステータスが2で発生した場合:「合計」のカウントがゼロであるため(注。 処理コードPOSIXエラーが「2」以上かどうかを確認すべきである)

出力はゼロです。これは-cオプションのためです:

-c、--count 通常の出力を抑制します。各入力ファイルに対して一致する行の数を出力してください。 -v、--invert-matchオプション(下記の を参照)を使用して、一致しない行を数えます。 (-cはPOSIXで指定されています)

強制的に終了コード0にしたい場合は、||あなたのコマンドに真実: エコー '合計' | grep -cいいえ|| true

関連する問題