有更优雅的方法(bourne shell)吗?
IsThereAnyApplesLeft
applesLeft=$?
通常在c或java中我会这样做:
applesLeft=IsThereAnyApplesLeft
答案 0 :(得分:6)
退出状态通常隐式使用,如下所示:
if IsThereAnyApplesLeft;then
echo "Apples left"
fi
答案 1 :(得分:3)
尝试:
applesLeft=$(IsThereAnyApplesLeft > /dev/null)$?
是的,你要使用$?
,没有办法避免它。
答案 2 :(得分:0)
这两段代码无法直接比较。你的bash示例是创建一个子进程来运行一个名为“IsThereAnyApplesLeft”的可执行文件,等待该子进程完成并将子进程的退出代码存储在变量$中?这样你就可以检查它并采取相应的行动。
这实际上是一个非常复杂的交互,并且在C中执行相同的操作需要大量的代码。你必须fork()一个子进程,在子的pid上有父wait4pid(),同时在子文件中调用execl()对文件“IsThereAnyApplesLeft”进行运行。使用shell脚本语言的一个好处是它隐藏了你的这类东西。
相比之下,您的C代码片段只是调用C函数并将结果存储在局部变量中。在bash中看起来像这样:
IsThereAnyApplesLeft()
{
echo 498
}
applesLeft=`IsThereAnyApplesLeft`
echo "there are $applesLeft apples left."
答案 3 :(得分:-1)
$?
的优点是什么?
根据the Advanced Bash Scripting Guide,除了$?
之外,没有其他方法可以获得退出代码 - 除了$?
之外,他们没有列出任何其他方式来获取它。如果有另一种方式,它肯定会列在上面链接的退出代码部分。