Bash - 在脚本中使用未设置变量的问题

时间:2011-08-22 15:14:23

标签: bash

我有以下代码:

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移到那些之上,因为脚本很长并且有很多方法依赖于变量和其他方法。任何想法如何解决这个问题?

3 个答案:

答案 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移到那些之上。”

因此,您的修复程序(按优先顺序排列):

  1. 移动getopts循环。
  2. getopts循环之后以及在调用依赖于它们的任何函数之前,移动设置ANOTHER_VAR和ANOTHER_VAR_2的两行。