20
A
回答
14
每一道工序,即使是在Windows,具有記憶被稱爲環境塊塊,這包含環境變量。當創建新進程時,默認情況下,父進程的環境塊被複制到子進程,因此環境變量是將文本數據傳遞給子進程的簡單方法。
export
命令創建一個環境變量,或將普通的局部變量轉換爲環境變量。在C-shell中,其少數幾個優點之一就是它對環境變量(setenv
)使用不同的語法來對本地變量(set
)進行語法分析。 Bourne殼衍生物,如Bash和Korn殼,隱藏了所有這些。
目前,只有簡單的值可以傳遞,所以像數組這樣的項目不被支持(它只是導出第一個元素)。除非子進程是相同類型的shell(即bash的另一個實例),否則也不會導出使用define
設置的變量屬性。這也適用於導出的函數,雖然有時可能在不同類型的殼之間破解它(使用eval
)。
在Bash(和其他)中有一個叫做allexport
的shell設置,這意味着所有變量都是環境變量 - 可能通常是一個糟糕的主意。您可以使用execve
之類的語言(如C語言)提供不同的environemnt塊,但從shell中需要一個程序,如env
,有關詳細信息,請參閱man env
。
34
export
使變量可用於子過程。
也就是說,如果您從腳本產生一個新的進程,變量k
將不可用於該子進程,除非您使用export
它。請注意,如果在子流程中更改此變量,將不會在父流程中可見。
有關更多詳細信息,請參見this doc的第3.2.3節。
18
我創建了一個簡單的腳本以示區別:
$ cat script.sh
echo $answer
讓我們來測試不export
$ answer=42
$ ./script.sh
$ . script.sh
42
值只知道如果使用的是相同過程中執行腳本(即相同的bash
實例,使用source
/.
)
現在,使用export
:
$ export answer=42
$ ./script.sh
42
$ . script.sh
42
的值是已知的子進程。
因此,如果你想讓子流程知道變量的值,那麼你應該使用export
。
相關問題
- 1. Semigroup和Semigroup之間的區別K
- 2. Map和Map.Entry之間的區別<K,V>接口
- 3. .htaccess中$ 1 vs%1之間的區別
- 4. 「?1」和「?」之間的區別
- 5. K&R和ANSI函數輸出之間的區別
- 6. M = L [I(1 + I)K]/[(1 + I)K-1]語法錯誤:無效的語法
- 7. 1概率N選擇k
- 8. Matlab /八度1-K表示
- 9. Octave中的1-K編碼
- 10. MATLAB - cvpartition的「k」和「kfold」分區類型之間的區別
- 11. ActiveDocument.Tables(k).Range.Cells(j).Shading.BackgroundPatternColor returns -1
- 12. K和R練習1-24
- 13. K&R練習1-13
- 14. 試圖找出K&R C ex 1-22
- 15. K&R練習1-14
- 16. 給定圖的頂點的k-着色計算(k-1) - 着色
- 17. 如何證明\ Omega {(n(logn)^ k)}的下界? [k> 1]
- 18. 獲取k值的所有排列(k = 1 ... n)
- 19. ASP.NET MVC 1和3之間的區別
- 20. 計算phi(k)的和1 <= k <= N?
- 21. 如何證明一個文法是LL(k)k> 1
- 22. tp(,)和tpo之間的區別(1)()
- 23. TimerTask和Executors.newScheduledThreadPool之間的區別(1)
- 24. srand(1)和srand(0)之間的區別
- 25. .MakeArrayType()和.MakeArrayType(1)之間的區別
- 26. Javascript:Forloop i ++和(i + 1)之間的區別
- 27. 「$ | ++」和「$ | = 1」之間的區別是什麼
- 28. Emacs客戶端:C-x k和C-x之間的區別#
- 29. K均值聚類和矢量量化之間的區別?
- 30. SOM(Self Organizing Maps)和K-Means之間的區別是什麼?
簡明扼要。 +1 –