Bash - problem with using unset variable in a script
I have following code:
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
The problem is that setting the VAR1
after ANOTHER_VARs
are set makes their paths without the VAR1
part. I can't move the getopts
above those because the script is long and there are many methods which depends on the v开发者_如何学Pythonariables and on other methods. Any ideas how to solve this?
I'd make ANOTHER_VAR and ANOTHER_VAR_2 into functions. The return value would depend on the current value of VAR1.
ANOTHER_VAR () { echo "$VAR1/path/to/file"; }
ANOTHER_VAR_2 () { echo "$VAR1/path/to/another/file"; }
Then, instead of $ANOTHER_VAR
, you'd use $(ANOTHER_VAR)
Is it possible to set the ANOTHER_VAR and ANOTHER_VAR_2 variables below where getopts
is called? Also, how about setting the ANOTHER_VAR and ANOTHER_VAR_2 in a function, that's called after getopts?
foobar(){
do something
return
}
foobar()
Your 'many methods which depend on the variables' cannot be used before you set ANOTHER_VAR, so you can simply move the definitions to after the getopts
loop.
One advantage of shell scripts is that variables do not have to be defined before the functions that use them are defined; the variables merely have to be defined at the time when the functions are used. (That said, it is not dreadfully good style to do this, but it will get you out of the scrape you are in. You should also be able to move the getopts
loop up above the functions, which would be better. You have a lot of explaining to do before you can get away with "I can't move the getopts
above those".)
So, your fixes are (in order of preference):
- Move the
getopts
loop. - Move the two lines that set ANOTHER_VAR and ANOTHER_VAR_2 after the
getopts
loop and before you invoke any function that depends on them.
精彩评论