我正在尝试使我的脚本更通用,因此尝试传递参数。 我有配置文件,其中包含变量(在脚本中使用),在脚本中,我在另一个脚本(ksh)中获取(源命令)该文件。
配置文件包含:
p2020_m23_ORACLE_USERNAME=sanjeeb
脚本的参数是p2020_m23
。
ksh脚本:
export SOURCE_CD=$1
export CONFIG_FILE=/user/spanda20/dbconfig.txt
source $CONFIG_FILE
USERNAME=${${SOURCE_CD}_ORACLE_USERNAME} << **This throws error** >>
USERNAME=$p2020_m23_ORACLE_USERNAME <<< **This gives correct result** >>
手动测试:
[spanda2 config]$ export SOURCE_CD=p2020_m23
[spanda2 config]$ export m23_ORACLE_USERNAME=sanjeeb
[spanda2 config]$ export USERNAME=${${SOURCE_CD}_ORACLE_USERNAME}
-bash: USERNAME=${${SOURCE_CD}_ORACLE_USERNAME}: bad substitution
答案 0 :(得分:0)
USERNAME_REF="${SOURCE_CD}_ORACLE_USERNAME"
USERNAME="${!USERNAME_REF}"
答案 1 :(得分:0)
${parameter}
- 参数的值被替换
所以如果你想追加2个变量的值并在其他变量中赋值。你应该写这样的
export SOURCE_CD=p2020_m23
export m23_ORACLE_USERNAME=sanjeeb
export USERNAME="${SOURCE_CD}_${ORACLE_USERNAME}"
答案 2 :(得分:0)
在ksh中,您可以使用typeset -n
或nameref
的变量间接。
简单示例:
$ typeset -n that
$ this=word
$ that=this
$ echo $that
word
$ this=nothing
$ echo $that
nothing
名称引用现在使$that
返回$this
的当前值。