キャプチャせずにコマンド出力が空の場合は1を返します。

キャプチャせずにコマンド出力が空の場合は1を返します。

複数のパイプで終わるシェルスクリプトがあり、出力が空の場合はgrep ... | while read ...| sort | uniq1を返したいのですが、入力が空の場合でもuniqは常に0を返します。

これまで私が見つけた最良の解決策は、空のパターンでgrepを追加することです... uniq | grep ''。これは完全に機能しますが、ハッキングのように感じます。

だから私の質問は:これを行うより良い/標準的な方法はありますか?

いくつかの制限事項:

  • 後でもう一度印刷する必要があるため、出力を変数にキャプチャしたくありません。a=$(... | uniq); printf '%s\n' "$a"; [ -n "$a" ]これも正しいとは思われません。
  • 可能であれば、標準ツール(もはやユーティリティなし)とポータブルツールを好みます。

ありがとうございます!

ベストアンサー1

正直| grep ''大丈夫だと思います。パイプラインにはすでに多くのプログラムがあるため、他のプログラムを開発しても問題にはなりません。そして、あなたはそれが何であるgrepかをすでに知っているので、これを行うために「スマートな」シェルを作成する必要はありません。

コメントでは、| grep .これが別の可能性である可能性があると述べました。grep .空白行は一致せずに一致するため、grep ''必要な内容に合わせて選択してください。

ただし、これらの使用はgrep一般の読者にはすぐにはわかりません。

おすすめ記事