我必须在 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都会打印到屏幕上。主要区别在于>and|运算stdout符默认捕获,但不捕获stderr

因此,如果您的脚本位于管道中间,INT is an integer.则会继续沿着管道向下运行并INT is not an integer打印到屏幕上,而不是进入管道。

答案2

该字符串将标准输出合并到标准错误中。您执行此操作后希望看到标准错误的输出。不知道为什么您会认为这是必要的。

相关内容