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