所以,假设我在一个脚本中有一个命令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
无论如何我可以简化它吗?
答案 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
不要使用$()
加上反引号,因为它实际执行命令然后执行其输出。
另见: