2

有没有更优雅的方式来做到这一点(bourne shell)?

IsThereAnyApplesLeft
applesLeft=$?

通常在 c 或 java 中我会这样做:

applesLeft=IsThereAnyApplesLeft
4

4 回答 4

6

退出状态通常像这样隐式使用:

if IsThereAnyApplesLeft;then
   echo "Apples left"
fi
于 2010-04-16T16:40:50.670 回答
3

尝试:

applesLeft=$(IsThereAnyApplesLeft > /dev/null)$?

是的,你必须使用$?没有办法避免它。

于 2010-04-16T16:35:46.577 回答
0

这两段代码没有直接可比性。您的 bash 示例正在创建一个子进程来运行名为“IsThereAnyApplesLeft”的可执行文件,等待该子进程完成并将子进程的退出代码存储在变量 $? 这样您就可以检查它并采取相应的行动。

这实际上是一个相当复杂的交互,并且在 C 中做同样的事情需要大量的代码。您必须 fork() 一个子进程,让父进程 wait4pid() 在子进程的 pid 上,同时在子进程中调用文件“IsThereAnyApplesLeft”上的 execl() 以使其运行。使用 shell 脚本语言的好处之一是它对你隐藏了这类东西。

相比之下,您的 C 代码片段只是调用 C 函数并将结果存储在局部变量中。在 bash 中看起来像这样:

IsThereAnyApplesLeft()
{
        echo 498
}

applesLeft=`IsThereAnyApplesLeft`
echo "there are $applesLeft apples left."
于 2010-04-16T17:06:01.493 回答
-1

有什么不优雅的$?

根据Advanced Bash Scripting Guide,除此之外没有其他方法可以获取退出代码$?- 好吧,除了 之外,他们没有列出任何其他获取它的方法$?。如果有其他方法,它肯定会列在上面链接的退出代码部分。

于 2010-04-16T16:36:15.157 回答