2011-04-26 139 views

回答

11

declare -x FOOexport FOO相同。它將FOO變量「導出」爲環境變量,以便您從該shell會話運行的程序可以看到它。

+0

我不認爲他們是確切的同義詞。 – 2012-07-06 18:46:48

+0

不是嗎?那麼爲什麼當你運行'export'(沒有任何參數)時,它會使用'declare -x'輸出當前的輸出? – 2012-07-07 04:48:20

+0

我不確定,但請參閱[此問題](http://stackoverflow.com/q/7506644/834176)。我試了一下,他們的行爲有所不同。 – 2012-07-09 13:08:05

5

聲明-x可以用來代替eval來允許將變量設置爲shell的參數。與安全

 
# THIS IS NOT SAFE 
while test $# -gt 0; do 
    eval export $1 
    shift 
done 

:例如,你可以更換極不安全

 
while test $# -gt 0; do 
    declare -x $1 
    shift 
done 

順便說一句,這種結構允許用戶調用的腳本:

 
$ ./test-script foo=bar 

而不是更習慣(但有些令人困惑):

 
$ foo=bar ./test-script 
+0

謝謝。但第一個選項如何不安全? – abc 2011-04-26 21:27:16

+4

無論何時您評估一個字符串,您都可以給可以構建字符串的用戶提供腳本執行任何操作的能力。 – 2011-04-27 03:20:27