Ksh嵌套替换

时间:2014-12-16 09:33:18

标签: shell unix ksh aix substitution

我有以下配置文件:

export PROFILE_ACTIVE=0 

export PROFILE_SCSADP01[0]="0 84"
export PROFILE_SCSADP04[0]="85 170"
export PROFILE_SCSADP05[0]="171 255"

export PROFILE_SCSADP01[1]="-1 -1"
export PROFILE_SCSADP04[1]="85 170|0 42"
export PROFILE_SCSADP05[1]="171 255|43 84"

我想在ksh脚本中使用替换来访问这些变量:

我可以使用以下语法轻松访问每个变量:

结果= $ {的 PROFILE_SCSADP01 [$ {PROFILE_ACTIVE}]}

但是我需要粗体部分是可变的,而不是固定的。

我已经厌倦了这种语法:

Temp="PROFILE_SCSADP01"
result=${$Temp[${PROFILE_ACTIVE}]}

然而,我总是得到一个糟糕的替代错误。 我试图寻找解决方法,但找不到任何工作,

1 个答案:

答案 0 :(得分:1)

kshtypeset -n命令(see here),我认为这是首选解决方案:

typeset -n tmp="PROFILE_SCSADP01"
result=${tmp[${PROFILE_ACTIVE}]}

您也可以使用evalbe careful):

tmp="PROFILE_SCSADP01"
result=$(eval echo \${$tmp[${PROFILE_ACTIVE}]})

eval在命令运行之前解析该命令,因此在eval完成后,生成的命令如下所示:

result=$(echo ${PROFILE_SCSADP01[0]})