1

所以,假设我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

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

4

3 回答 3

4

这个?

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

顺便说一句,$() 和反引号是相同效果的两种语法,这意味着你只想

$(`foo`)

iffoo输出要再次执行的命令的文本。喜欢:

foo()
{
  echo echo date
}
$(foo)
$(`foo`)
于 2009-11-17T02:51:24.897 回答
3
output=`foo`
echo "Return: $?" # $? is the return code
于 2009-11-17T02:51:34.100 回答
2

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

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

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

也可以看看:

于 2009-11-17T02:52:01.767 回答