echoコマンドの最後に ">&2"を追加する必要がありますか?

echoコマンドの最後に ">&2"を追加する必要がありますか?

例えば

#!/bin/bash
INT=-5
if [[ "$INT" =~ ^-?[0-9]+$ ]]; then
    echo "INT is an integer."
else
    echo "INT is not an integer." >&2
    exit 1
fi

「>&2」を削除するとき。違いなし。 「>&2」を追加する理由は何ですか?

答え1

違いは次のとおりです。

echo "INT is an integer."

標準出力に書き込んで、

echo "INT is not an integer." >&2

標準エラーに書き込みます。

Unixの世界では、stdoutこれは通常すべてがうまく機能するときに使用され、stderr何かが間違っているときにメッセージを印刷するためによく使用されます。

デフォルトではstdout、両方stderrとも画面に印刷されます。主な違いは、>演算|子がstdoutデフォルトでキャプチャされますが、キャプチャしないことですstderr

したがって、スクリプトがパイプの中央にある場合は、パイプに入るのではなく、パイプINT is an integer.に沿って下がって画面に印刷されます。INT is not an integer

答え2

この文字列は標準出力を標準エラーにマージします。これを行うと、標準エラーの出力が表示されると予想されます。なぜこれが必要だと思うのかよくわかりません。

関連情報