【问题标题】:Blank variable during bash command substitutionbash命令替换期间的空白变量
【发布时间】:2017-05-03 23:13:17
【问题描述】:

我正在执行命令替换并将结果保存到变量中。但是,命令的结果包含双引号,这导致变量为空。

运行test="$(java -version)" 时,我得到以下结果:

openjdk version "1.8.0_65"
OpenJDK Runtime Environment (build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)

但是运行echo $test 会产生一个空行。

【问题讨论】:

  • 听起来信息被写入标准错误而不是标准输出。你可以使用test="$(java -version 2>&1)"

标签: bash command-substitution


【解决方案1】:

test="$(java -version)" 直接将结果打印到终端的原因是java -version 输出到标准错误(stderr),而不是标准输出(stdout)。

因为没有 stdout 输出(这是 $(...) 捕获的内容),所以 $test 被分配了一个空字符串。

解决方法是将标准错误(stderr)重定向到标准输出(stdout)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 2013-06-09
    相关资源
    最近更新 更多