Bash

如何使變數可以從腳本中訪問

  • January 31, 2018

在 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

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