我有一个ksh脚本,它读取一个定义了多个会话的配置文件脚本。每个会话都定义了自己的参数:
SESSION_ONE_USER=...
SESSION_ONE_PWD=...
SESSION_TWO_USER=...
...
脚本从命令行获取SESSION参数,但我只是为示例设置它。
我想让SESSION参数值定义另一个参数名称的一部分,我需要来自的值,如:
SESSION="SESSION_ONE"
USER=${${SESSION}_USER}
PASS=${${SESSION}_PWD}
这给了我一个编译错误。 我也试过
GET_USER_PARAM(){
echo ${SESSION}_USER
}
echo $`GET_USER_PARAM`
但是返回$ SESSION_ONE_USER
我希望它返回参数SESSION_ONE_USER的值。 有没有人有任何解决方案?
答案 0 :(得分:1)
这是eval
的用途:
SESSION=SESSION_ONE
eval echo \$${SESSION}_USER
应显示$SESSION_ONE_USER
。
答案 1 :(得分:1)
不要使用变量名称,而是使用关联数组
typeset -A users
typeset -A pwd
session=SESSION_ONE
users[$session]=joe
pwd[$session]=secret
for key in "${!users[@]}"; do
echo "user for session $key is ${users[$key]}"
echo "pwd for session $key is ${pwd[$key]}"
done
答案 2 :(得分:1)
试试这个:
SESSION="SESSION_ONE"
SESSION_ONE_USER="foo"
SESSION_ONE_PWD="bar"
SESSION_USER=${SESSION}_USER
SESSION_PWD=${SESSION}_PWD
USER=${!SESSION_USER}
PASS=${!SESSION_PWD}
echo $USER
echo $PASS
“!”做一个间接的程度。请参阅Shell Parameter Expansion。
答案 3 :(得分:1)
如果这是ksh
,那么这是nameref
alias nameref='typeset -n'
示例解决方案
function session_parameters { set -u
typeset session=${1:?session name}
nameref user=SESSION_${session}_USER
nameref pass=SESSION_${session}_PASS
print session=$session user=$user pass=$pass
}
SESSION_ONE_USER="User1"
SESSION_ONE_PASS="Pass1"
SESSION_TWO_USER="User2"
SESSION_TWO_PASS="Pass2"
for s in ONE TWO THREE; do
session_parameters $s
done
示例输出
session=ONE user=User1 pass=Pass1
session=TWO user=User2 pass=Pass2
test_session_parameters[12]: session_parameters: line 5:
SESSION_THREE_USER: parameter not set
请注意使用set -u
强制第3行的错误消息。
nameref
用法:(来自内置帮助文本)
命名强>
typeset - 声明或显示带属性的变量
<强>概要强>
typeset [ options ] [name[=value]...]
-n
名称参考。
该值是name
引用的变量的名称。 name
不能包含..
。不能与任何其他选项一起使用。