これは grep -q のためです 一致が見つかるとすぐにゼロのステータスで終了します。 zfs コマンドはまだパイプに書き込み中ですが、リーダーがありません (grep のため) が終了したため)、SIGPIPE が送信されます カーネルからのシグナルで、141 のステータスで終了します .
この動作が見られるもう 1 つの一般的な場所は、head の場合です。 .例
$ seq 1 10000 | head -1
1
$ echo ${PIPESTATUS[@]}
141 0
この場合、head 最初の行を読んで終了し、 SIGPIPE を生成しました シグナルと seq 141 で終了しました .
The Linux Programmer's Guide の「The Infamous SIGPIPE Signal」を参照してください。
もう 1 つのオプションは、パイプを使用せずにプロセス置換を使用することです:
grep -q tank <(zfs リスト)
更新:括弧内で実行されるプロセスも sigpipe を受け取るため、同じことだと思います。
zfs list はよく知らない 、しかし、標準出力が閉じていることについて不平を言っていると思います- grep -q grep とは異なり、一致が見つかるとすぐに終了します .