2011-08-22 47 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循环之后,你调用依赖于他们的任何函数之前。