bash : 解析命令的输出并存储到变量中

bash : parse output of command and store into variable

我已经下了命令 return 'version:X' .

即:

$>./mybox -v
$>version:2

我不明白为什么这不起作用:

 $>VERSION=$( /home/mybox -v | sed 's/.*version:\([0-9]*\).*//')
 $>echo $VERSION
 $>

如果我写这个,就可以了:

 $>VERSION=$( echo "version:2" | sed 's/.*version:\([0-9]*\).*//')
 $>echo $VERSION
 $>2

此致

将 version/error/debugging 信息发送到 stderr 而不是 stdout 是很常见的。当 运行 来自终端的命令时,两者都将被打印,但只有 stdout 会通过管道到达 sed.

echo 默认情况下输出始终为 stdout,这就是为什么您在那里没有遇到问题的原因。

如果以上内容正确,您只需要在传递之前将 stderr(文件描述符 2)重定向到 stdout(文件描述符 1):

VERSION=$( /home/mybox -v 2>&1 | sed 's/.*version:\([0-9]*\).*//')
#                         ^^^^