Bash
如何使變數可以從腳本中訪問
在 Ubuntu 16.04 中,我執行了一個腳本(腳本 1),該腳本本身執行另外兩個腳本(腳本 2 和腳本 3)。
腳本 3 包含
${x}
已在腳本 2 ( ) 中聲明的變數的變數替換 (x=y
)。當然,在執行腳本 3 之前,我確保執行
source
腳本 2,以便將來在腳本 3 或其他情況下進行變數替換。問題是當我執行腳本 3(通過腳本 1)時,變數替換失敗並且結果不完美,但在手動執行中它成功了。
為什麼通過腳本1執行腳本3時變數替換失敗,但手動執行成功,如何確保它確實會發生?
如果
sourcing
腳本 2 還不夠,那麼我不知道是什麼。
這是一個變數範圍問題,與腳本是從命令行手動執行還是由另一個腳本執行完全無關。
未導出到環境的 shell 變數對子程序(包括子 shell)不可見
如果您
script2
在. _ _ 如果你同時在內部和內部進行採購,這幾乎是一樣的(但在這種情況下,一切都發生在 的範圍內)script3``script3``script2``script3``script2``script3``script1``script1
但是,如果您在
script2
內部進行採購,然後從script1
執行(而不是採購),那麼只有在它們碰巧被導出時才會看到定義或更改的變數。script3``script1``script3``script2
何時何地導出變數並不重要,只要它發生在
script3
執行之前。變數可以在script1
或 中導出script2
,甚至可以在開始執行的父 shell(或其 .profile/.bashrc/etc)中導出script1
。