我有以下代码:
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
问题是,在设置VAR1
之后设置ANOTHER_VARs
会使其路径没有VAR1
部分。我无法将getopts
移到那些之上,因为脚本很长并且有很多方法依赖于变量和其他方法。任何想法如何解决这个问题?
答案 0 :(得分: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)
答案 1 :(得分:0)
是否可以在调用getopts
的地方设置ANOTHER_VAR和ANOTHER_VAR_2变量?另外,如何在一个函数中设置ANOTHER_VAR和ANOTHER_VAR_2,这是在getopts之后调用的?
foobar(){
do something
return
}
foobar()
答案 2 :(得分:0)
在设置ANOTHER_VAR之前,不能使用“依赖于变量的许多方法”,因此您只需将定义移到getopts
循环之后。
shell脚本的一个优点是在定义使用它们的函数之前不必定义变量;变量只需在使用函数时定义。 (也就是说,这样做不是很好的风格,但它会让你摆脱你所处的刮擦。你也应该能够将getopts
循环移到功能之上,这会更好你有很多解释要做,然后才能逃脱“我无法将getopts
移到那些之上。”
因此,您的修复程序(按优先顺序排列):
getopts
循环。getopts
循环之后以及在调用依赖于它们的任何函数之前,移动设置ANOTHER_VAR和ANOTHER_VAR_2的两行。