有没有办法捕获命令的输出,并将其返回值转换为shell脚本中的变量?

时间:2009-11-17 02:46:28

标签: linux shell unix sh

所以,假设我在一个脚本中有一个命令foo,该脚本既有返回值,又有我感兴趣的输出字符串,我希望将它们存储到变量中(至少它的变量输出,其返回值可以用于条件)。

例如:

a=$(`foo`)   # this stores the output of "foo"
if foo; then # this uses the return value
    stuff...
fi

我能想到捕获输出的最好的事情是使用一些临时文件:

if foo > $tmpfile; then
    a=$(`cat $tmpfile`)
    stuff...
fi

无论如何我可以简化它吗?

3 个答案:

答案 0 :(得分:4)

此?

out=$(cmd)
rv=$?
if test $rv -eq 0; then
  echo "all good"
  echo $out
else
  echo "wtf, exit code was $rv"
fi

btw,$()和反引号是两种语法相同的效果,这意味着想要写

$(`foo`)

如果foo输出您想要再次执行的命令的文本。像:

foo()
{
  echo echo date
}
$(foo)
$(`foo`)

答案 1 :(得分:3)

output=`foo`
echo "Return: $?" # $? is the return code

答案 2 :(得分:2)

来自bash :(注意第一列中的第一个$是我的提示)

$ A=$(echo abc; false); echo status:$? A:$A
status:1 A:abc

不要使用$()加上反引号,因为它实际执行命令然后执行其输出。

另见: