2011-08-22 50 views
0

使用未設置的變量我有以下代碼:巴什 - 問題在腳本

VAR1="" 
ANOTHER_VAR="$VAR1/path/to/file" 
ANOTHER_VAR_2="$VAR1/path/to/another/file" 

... 

# getopts which reads params from command line and sets the VAR1 

的問題是,設置VAR1ANOTHER_VARs設置使得它們的路徑沒有VAR1部分。我無法移動getopts,因爲腳本很長,並且有很多方法依賴於變量和其他方法。任何想法如何解決這個問題?

+1

可以移動'ANOTHER_VAR'和'ANOTHER_VAR_2'低於'getopts'呢? – sbtkd85

+1

@ sbtkd85他的確明確表示他不能那樣做,但是同樣地,我不明白爲什麼會這樣。你可以發佈一些更多的代碼/更好的解釋爲什麼你不能改變操作的順序? – DaveRandom

+0

@DaveRandom腳本有超過500線的許多功能,這需要的變量和getopts的需要這些功能,所以順序必須是:變量,函數,getopts的。訂單不能簡單地改變。 – user219882

回答

3

我想讓ANOTHER_VAR和ANOTHER_VAR_2進入功能。返回值取決於VAR1的當前值。

ANOTHER_VAR() { echo "$VAR1/path/to/file"; } 
ANOTHER_VAR_2() { echo "$VAR1/path/to/another/file"; } 

然後,而不是$ANOTHER_VAR,你會使用$(ANOTHER_VAR)

+0

偉大的解決方案。謝謝! – user219882

0

是否有可能設置爲低於地方getopts被稱爲ANOTHER_VAR和ANOTHER_VAR_2變量?另外,如何在函數中設置ANOTHER_VAR和ANOTHER_VAR_2,這在getopts之後調用?您設置ANOTHER_VAR之前

foobar(){ 
    do something 
    return 
} 
foobar() 
0

你「這取決於許多變量的方法」無法使用,所以你可以在getopts循環後,只需移動中的定義。 shell腳本的

一個優點是,變量沒有被定義使用它們的功能之前定義;只有在使用功能時才需要定義變量。 (這就是說,它不是可怕的好作風要做到這一點,但它會帶你離開你在刮的。你也應該能夠移動getopts循環了上述的功能,這將是更好的。你有脣舌做之前,你可以逃脫「我動不了上面那些getopts」)的

所以,你的修補程序是(按優先順序排列):

  1. 移動getopts環。
  2. 移動兩行設置ANOTHER_VAR和ANOTHER_VAR_2的getopts循環之後,你調用依賴於他們的任何函數之前。