例えば
#!/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
この文字列は標準出力を標準エラーにマージします。これを行うと、標準エラーの出力が表示されると予想されます。なぜこれが必要だと思うのかよくわかりません。