2010-04-16 83 views

回答

6

退出狀態,通常使用隱式是這樣的:

if IsThereAnyApplesLeft;then 
    echo "Apples left" 
fi 
+0

+1除非你確實需要實際的退出代碼;但我通常不希望在外面的c – guns 2010-04-16 16:43:40

+0

不要忘記短路條件:IsThereAnyApplesLeft &&回聲「蘋果左」 – pra 2010-04-16 18:27:13

3

嘗試:

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

是的,你已經使用$?有沒有辦法避免。

+0

+1聰明!而且,假設沒有輸出到stdout(或stderr),重定向可以省略。 – 2010-04-16 18:04:00

-1

關於$?什麼不優雅?

the Advanced Bash Scripting Guide,有沒有其他辦法可以獲取退出代碼除了$? - 好了,他們沒有列出任何其他方式來獲得它除了$?。如果還有其他方法,它肯定會在上面鏈接的退出代碼部分列出。

+0

只有當您想保留退出狀態時纔有效。如果你只打算使用一次狀態,你可以直接在測試中使用它'if IsThereAnyApplesLeft;然後回顯「是」;否則回顯「否」; fi' – mpez0 2010-04-16 16:46:18

0

兩段代碼不能直接比較。你的bash示例創建一個子進程來運行名爲「IsThereAnyApplesLeft」的可執行文件,等待該子進程完成並將子進程的退出代碼存儲在變量$中?以便您可以檢查它並採取相應的行動。

這實際上是一個非常複雜的交互,在C中做同樣的事情需要大量的代碼。你必須fork()一個子進程,在子進程的pid上擁有父節點wait4pid(),同時在孩子調用execl()文件的「IsThereAnyApplesLeft」使其運行。使用shell腳本語言的好處之一就是它隱藏了你的這些東西。

通過比較,您的C代碼片段只是調用C函數並將結果存儲在局部變量中。這看起來像這樣在bash:

IsThereAnyApplesLeft() 
{ 
     echo 498 
} 

applesLeft=`IsThereAnyApplesLeft` 
echo "there are $applesLeft apples left."