shell脚本中的双参数抛出错误

时间:2015-07-02 15:30:10

标签: bash unix ksh

我正在尝试使我的脚本更通用,因此尝试传递参数。 我有配置文件,其中包含变量(在脚本中使用),在脚本中,我在另一个脚本(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

3 个答案:

答案 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 -nnameref的变量间接。

简单示例:

    $ typeset -n that
    $ this=word
    $ that=this
    $ echo $that
    word
    $ this=nothing
    $ echo $that
    nothing

名称引用现在使$that返回$this的当前值。