2012-03-27 61 views

回答

6

沒有內置的方式做到這一點,沒有了,是永遠無法做到完美,因爲像這樣的情況下,:

  • 假設用戶的Bash的輪廓出口CLASSPATH作爲環境變量。然後,一個Bash腳本可能包含一個像
    CLASSPATH=...
    這樣的語句,但從未參考CLASSPATH,如果它在分配CLASSPATH的唯一目的是修改某些使用該環境變量的程序(如java)的行爲。
  • 假設我創建了變量ab以及變量c,它們的值是從用戶獲得的,可以是ab。然後我可以使用${!c}來獲取用戶指定變量的值;給定的腳本運行可能永遠不會引用b(因爲c設置爲'a'),但腳本的其他運行可能會有所不同。

也就是說,你可能會對選項感興趣set builtin。如果您的腳本包含以下命令:

set -u 

然後從這一點上來說,這將是指尚未設定的變量或參數錯誤。這可以幫助檢測變量名稱和錯誤中的拼寫錯誤。這顯然比gcc -Wall的要少得多(因爲gcc總是在引用未聲明的變量時會給出錯誤消息),但是您可能會發現以相同的方式有用。

+0

謝謝,'set -u'會很有用。但是,我正在尋找能夠檢查所有正在使用的變量的東西,而不是所有正在使用的變量都被聲明。也許一個bash腳本可以做到這一點? – Eddy 2012-04-02 11:13:31

+0

@Eddy:是的,我明白你在找什麼。正如我所解釋的那樣,沒有固定的方法來做到這一點,它永遠不可能完美地完成。您是否在尋找一種容易出錯的方式來近似? – ruakh 2012-04-02 11:38:19