我必须在 echo 命令的末尾添加 ">&2" 吗?

yux*_*uan 2 shell

例如

#!/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
Run Code Online (Sandbox Code Playgroud)

当我删除“>&2”时。没有什么不同。为什么我需要添加“>&2”

Nic*_*ark 9

区别在于:

echo "INT is an integer."
Run Code Online (Sandbox Code Playgroud)

写入标准输出,以及

echo "INT is not an integer." >&2
Run Code Online (Sandbox Code Playgroud)

写入标准错误。

在 Unix 世界中,stdout通常在一切正常时stderr使用,通常用于在出现问题时打印消息。

默认情况下,stdoutstderr都打印到屏幕上。主要区别在于>and|运算符stdout默认捕获,而不是stderr.

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