如何在korn shell中获取变量的值?

时间:2009-05-15 21:02:41

标签: ksh

当你给出变量的名称时,ksh中有没有办法获得变量的值?

例如:

#!/usr/bin/ksh
var_name=$1  #pretend here that the user passed the string "PATH"
echo ${$var_name}  #echo value of $PATH -- what do I do here?

4 个答案:

答案 0 :(得分:9)

eval `echo '$'$var_name`

echo将'$'连接到$ var_name中的变量名,eval会对其进行求值以显示该值。

编辑: 以上不太正确。正确答案是没有反叛。

eval echo '$'$var_name

答案 1 :(得分:1)

var_name=$1  #pretend here that the user passed the string "PATH"
printenv    $var_name

答案 2 :(得分:1)

printenv不是ksh内置的,可能并不总是存在。对于较旧的ksh版本,在 ksh93 之前,eval'expression'方法效果最佳。

ksh93中一个强大的方法是使用间接变量 使用'nameref'或'typeset -n'。

定义并验证引用$PATH nameref 变量:

$ nameref indirect=PATH
$ print $indirect
/usr/bin:/usr/sbin

当我们更改PATH时,了解 nameref 变量的变化情况:

$ PATH=/usr/bin:/usr/sbin:/usr/local/bin
$ print $indirect
/usr/bin:/usr/sbin:/usr/local/bin

显示ksh版本和nameref的别名:

$ type nameref
nameref is an alias for 'typeset -n'
$ echo ${.sh.version}
Version JM 93t+ 2010-02-02

答案 3 :(得分:0)

在你的答案上面一步(我花了很多时间试图找到这两个答案)。下面将允许您导出动态变量,然后动态调用它:

echo -n "Please provide short name for path:"
read PATH_SHORTCUT
echo -n "Please provide path:"
read PATH
eval export \${PATH_SHORTCUT}_PATH="${PATH}"
eval echo Path shortcut: ${PATH_SHORTCUT} set to \$"${PATH_SHORTCUT}_PATH".