有沒有更優雅的方式來做到這一點(Bourne shell)?Bourne Shell:退出狀態的優雅方式
IsThereAnyApplesLeft
applesLeft=$?
通常在C或Java,我會做:
applesLeft=IsThereAnyApplesLeft
有沒有更優雅的方式來做到這一點(Bourne shell)?Bourne Shell:退出狀態的優雅方式
IsThereAnyApplesLeft
applesLeft=$?
通常在C或Java,我會做:
applesLeft=IsThereAnyApplesLeft
退出狀態,通常使用隱式是這樣的:
if IsThereAnyApplesLeft;then
echo "Apples left"
fi
嘗試:
applesLeft=$(IsThereAnyApplesLeft > /dev/null)$?
是的,你已經使用$?
有沒有辦法避免。
+1聰明!而且,假設沒有輸出到stdout(或stderr),重定向可以省略。 – 2010-04-16 18:04:00
關於$?
什麼不優雅?
據the Advanced Bash Scripting Guide,有沒有其他辦法可以獲取退出代碼除了$?
- 好了,他們沒有列出任何其他方式來獲得它除了$?
。如果還有其他方法,它肯定會在上面鏈接的退出代碼部分列出。
只有當您想保留退出狀態時纔有效。如果你只打算使用一次狀態,你可以直接在測試中使用它'if IsThereAnyApplesLeft;然後回顯「是」;否則回顯「否」; fi' – mpez0 2010-04-16 16:46:18
兩段代碼不能直接比較。你的bash示例創建一個子進程來運行名爲「IsThereAnyApplesLeft」的可執行文件,等待該子進程完成並將子進程的退出代碼存儲在變量$中?以便您可以檢查它並採取相應的行動。
這實際上是一個非常複雜的交互,在C中做同樣的事情需要大量的代碼。你必須fork()一個子進程,在子進程的pid上擁有父節點wait4pid(),同時在孩子調用execl()文件的「IsThereAnyApplesLeft」使其運行。使用shell腳本語言的好處之一就是它隱藏了你的這些東西。
通過比較,您的C代碼片段只是調用C函數並將結果存儲在局部變量中。這看起來像這樣在bash:
IsThereAnyApplesLeft()
{
echo 498
}
applesLeft=`IsThereAnyApplesLeft`
echo "there are $applesLeft apples left."
+1除非你確實需要實際的退出代碼;但我通常不希望在外面的c – guns 2010-04-16 16:43:40
不要忘記短路條件:IsThereAnyApplesLeft &&回聲「蘋果左」 – pra 2010-04-16 18:27:13