例如
#!/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
该字符串将标准输出合并到标准错误中。您执行此操作后希望看到标准错误的输出。不知道为什么您会认为这是必要的。