Bash变量赋值奇怪的行为

时间:2016-02-20 05:49:19

标签: linux bash variables ubuntu variable-assignment

我正在尝试编写一个bash脚本,而这样做是困在这里的:

我不明白为什么会这样:

MSG=$(pwd)
echo $MSG

输出:

/home/harsh/source/git/trunk

但这不是:

MSG=$(java -version)
echo $MSG

输出:

BLANK

请帮忙!

2 个答案:

答案 0 :(得分:2)

某些命令最后可能需要2>&1才能获得任何输出:

MSG=$(java -version 2>&1)

它将任何标准错误(2)发送到重定向标准输出(1)的任何位置。

答案 1 :(得分:1)

错误消息通常写入标准错误流stderr而不是标准输出流stdout。如果java -version生成错误而不是您预期的错误(打印版本),则可能会stderr生成错误。版本信息也可以打印到stderr

命令替换$()stdout中的$()获取java的输出,并将其替换为其位置。如果出现错误,这可能不算什么。如果您是在终端上输入此内容,则仍应看到终端中stderr的{​​{1}}的任何输出(例如错误消息)。