Shell-Script

如果其他連結,shell 腳本解釋器是否會優化?

  • March 18, 2021

據我了解,解釋器逐行執行程式碼;但我發現我的推理可能不正確。如果在這個例子中第一if行返回真,程序會知道跳到fi後面echo "APPROVED"(它會知道哪一行在fi嗎?)還是仍然需要一些時間來檢查下一行,而不是在它們執行時執行它們在eliforelse裡面

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 腳本並不是一種非常有效的程式碼編寫方式,因為您最終會分叉並執行大量程序,因此根據我的經驗,您在典型的優化編譯器中發現的優化往往不存在,因為他們並沒有改善太多。提供更多內置命令通常更有效,這完全避免了產生外部程序的需要,並為您帶來更多收益。

引用自:https://unix.stackexchange.com/questions/639937