如果你有一個腳本:test1.sh
var="first"
echo $var
和 test2.sh
var="second"
sh ./test1.sh
echo $var
如果 bash 使用動態范圍并且如果它使用靜態范圍,執行 test2.sh 的預期輸出是什么?
據我了解,bash 使用動態作用域,所以我期待當 test2.sh 運行時,$var 設定為“第二”,而當 test1.sh 從 test2.sh 中運行時,var 設定為“第一”。因此預期的輸出將是:首先
但是,我得到輸出:第一秒
這向我暗示這是靜態范圍?除非我的理解在這里是錯誤的
uj5u.com熱心網友回復:
在另一個腳本中呼叫腳本時,bash 是使用動態作用域還是靜態作用域
shell中沒有“動態”或“靜態”范圍。在 Bash 中,只有函式“作用域”,但在這里不相關。
有流程。行程是獨立的物體,具有獨立的記憶體空間。就像firefox不能改變chrome一樣,子行程也不能改變父行程。
什么是預期的輸出
輸出是first second。sh運行一個名為sh. 子行程不能影響父行程變數。
請注意,以命令啟動的子行程僅繼承匯出的變數。如果var未匯出,則在test1.sh.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/532259.html
標籤:重击壳范围
上一篇:Bash-從特定目錄中查找檔案
