Shell-Script
如果其他連結,shell 腳本解釋器是否會優化?
據我了解,解釋器逐行執行程式碼;但我發現我的推理可能不正確。如果在這個例子中第一
if
行返回真,程序會知道跳到fi
後面echo "APPROVED"
(它會知道哪一行在fi
嗎?)還是仍然需要一些時間來檢查下一行,而不是在它們執行時執行它們在elif
orelse
裡面if [ $AVERAGE -ge "6" ] then echo "APPROVED" # Does shell know how to directly get from here /\... elif [ $AVERAGE -lt "2" ] then echo "FAILED" else echo "RETAKE TEST" # ... To here? \/ fi
謝謝!
正如 Michael Horner 所指出的,shell 必須首先解析整個命令,因為如果它在管道中或在後台,則會影響命令的執行。對於 shell 執行的任何命令都是如此,如果您在互動式提示符下編寫多行 shell 命令,它就會這樣做,因為它會在執行之前等待您完成命令。
Shell 將正確執行每個條件,並在達到條件為真時停止。它不會執行進一步的 elif 條件。POSIX 明確規定了 Unix shell 的行為。
shell 是否進行了優化以使事情執行得更快或更有效是實施質量問題。像busybox這樣的小型shell可能會以犧牲少量速度為代價盡可能地小,而其他shell可能更喜歡優化事物。
一般來說,shell 腳本並不是一種非常有效的程式碼編寫方式,因為您最終會分叉並執行大量程序,因此根據我的經驗,您在典型的優化編譯器中發現的優化往往不存在,因為他們並沒有改善太多。提供更多內置命令通常更有效,這完全避免了產生外部程序的需要,並為您帶來更多收益。