簡體   English   中英

Bash-在腳本中使用unset變量的問題

[英]Bash - problem with using unset variable in a script

我有以下代碼:

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

問題在於,在設置ANOTHER_VARs后設置VAR1會使它們的路徑沒有VAR1部分。 我不能將getopts移到那些之上,因為腳本很長,並且有很多方法取決於變量和其他方法。 任何想法如何解決這個問題?

我要把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

是否可以在調用getopts下面設置ANOTHER_VAR和ANOTHER_VAR_2變量? 另外,如何在getopts之后調用的函數中設置ANOTHER_VAR和ANOTHER_VAR_2?

foobar(){
  do something
  return
}
foobar()

在設置ANOTHER_VAR之前,不能使用“取決於變量的許多方法”,因此您只需將定義移至getopts循環之后即可。

Shell腳本的一個優點是,在定義使用它們的函數之前不必定義變量。 僅在使用功能時定義變量。 (也就是說,這樣做並不是很不錯的樣式,但是會使您陷入困境。您還應該能夠將getopts循環移到函數上方,這樣會更好。您可以在您無法通過“我不能將getopts移到那些之上之前”進行很多解釋。)

因此,您的修復是(按優先順序):

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM