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

Fre*_*red 0 variables bash command

我做了一个命令女巫返回'版本:X'.

即:

$>./mybox -v
$>version:2
Run Code Online (Sandbox Code Playgroud)

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

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

如果我写这个,没关系:

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

问候

Jef*_*ica 5

发送版本/错误/调试信息很常见stderr,而不是stdout.从终端运行命令时,两者都将被打印,但只会stdout通过管道进行打印sed.

echo输出总是stdout默认输入,这就是为什么你没有遇到麻烦.

如果以上是正确的,您只需要将stderr(文件描述符2)重定向到stdout(文件描述符1),然后再传递它:

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

  • @Sleafar通常是,除非在复制粘贴或控制台行覆盖的工件中忽略它.这可能是一个评论,但它变得越来越长,我决定采取预感. (2认同)