Bash 变量赋值的奇怪行为
Bash variable assignment strange behaviour
我正在尝试编写一个 bash 脚本,但在编写时卡在了此处:
我不明白为什么会这样:
MSG=$(pwd)
echo $MSG
输出:
/home/harsh/source/git/trunk
但事实并非如此:
MSG=$(java -version)
echo $MSG
输出:
空白
请帮忙!
错误消息通常写入标准错误流 stderr
而不是标准输出流 stdout
。如果 java -version
生成错误而不是您预期的错误(打印版本),它可能会对 stderr
这样做。版本信息也可能打印到 stderr
.
命令替换 $()
从 stdout
获取 $()
中内容的输出并将其替换到它的位置。如果出现错误,这可能没什么。如果您从终端输入此内容,您应该仍会在终端中看到来自 java
的 stderr
的任何输出(例如错误消息)。
某些命令可能需要在末尾 2>&1
才能获得任何输出:
MSG=$(java -version 2>&1)
它将任何标准错误(2) 发送到重定向标准输出(1) 的任何位置。
我正在尝试编写一个 bash 脚本,但在编写时卡在了此处:
我不明白为什么会这样:
MSG=$(pwd)
echo $MSG
输出:
/home/harsh/source/git/trunk
但事实并非如此:
MSG=$(java -version)
echo $MSG
输出:
空白
请帮忙!
错误消息通常写入标准错误流 stderr
而不是标准输出流 stdout
。如果 java -version
生成错误而不是您预期的错误(打印版本),它可能会对 stderr
这样做。版本信息也可能打印到 stderr
.
命令替换 $()
从 stdout
获取 $()
中内容的输出并将其替换到它的位置。如果出现错误,这可能没什么。如果您从终端输入此内容,您应该仍会在终端中看到来自 java
的 stderr
的任何输出(例如错误消息)。
某些命令可能需要在末尾 2>&1
才能获得任何输出:
MSG=$(java -version 2>&1)
它将任何标准错误(2) 发送到重定向标准输出(1) 的任何位置。