shell 脚本抛出错误中的双参数
Double Parameter in shell scripting throwing error
我试图让我的脚本更通用,因此试图传递参数。
我有包含变量(在脚本中使用)和脚本中的配置文件,我在另一个脚本(ksh)中获取(源命令)文件。
配置文件包含:
p2020_m23_ORACLE_USERNAME=sanjeeb
脚本的参数是 p2020_m23
。
ksh 脚本:
export SOURCE_CD=
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
USERNAME_REF="${SOURCE_CD}_ORACLE_USERNAME"
USERNAME="${!USERNAME_REF}"
${parameter}
-参数的值被代入
所以如果你想附加 2 个变量的值并分配给其他 .你应该这样写
export SOURCE_CD=p2020_m23
export m23_ORACLE_USERNAME=sanjeeb
export USERNAME="${SOURCE_CD}_${ORACLE_USERNAME}"
在 ksh 中,您可以使用 typeset -n
或 nameref
的变量间接寻址。
简单示例:
$ typeset -n that
$ this=word
$ that=this
$ echo $that
word
$ this=nothing
$ echo $that
nothing
名称引用现在使 $that
return 成为 $this
的当前值。
我试图让我的脚本更通用,因此试图传递参数。 我有包含变量(在脚本中使用)和脚本中的配置文件,我在另一个脚本(ksh)中获取(源命令)文件。
配置文件包含:
p2020_m23_ORACLE_USERNAME=sanjeeb
脚本的参数是 p2020_m23
。
ksh 脚本:
export SOURCE_CD=
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
USERNAME_REF="${SOURCE_CD}_ORACLE_USERNAME"
USERNAME="${!USERNAME_REF}"
${parameter}
-参数的值被代入
所以如果你想附加 2 个变量的值并分配给其他 .你应该这样写
export SOURCE_CD=p2020_m23
export m23_ORACLE_USERNAME=sanjeeb
export USERNAME="${SOURCE_CD}_${ORACLE_USERNAME}"
在 ksh 中,您可以使用 typeset -n
或 nameref
的变量间接寻址。
简单示例:
$ typeset -n that
$ this=word
$ that=this
$ echo $that
word
$ this=nothing
$ echo $that
nothing
名称引用现在使 $that
return 成为 $this
的当前值。