代码之家  ›  专栏  ›  技术社区  ›  mtruesdell

如何在kornshell中根据变量的名称获取变量的值?

ksh
  •  2
  • mtruesdell  · 技术社区  · 17 年前

    例如:

    #!/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 回复  |  直到 17 年前
        1
  •  9
  •   Kevin Beck    17 年前
    eval `echo '$'$var_name`
    

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

    eval echo '$'$var_name
    
        2
  •  2
  •   Henk Langeveld    12 年前

    printenv 不是ksh内置的,可能并不总是存在。对于较旧的ksh版本,在 ksh93

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

    定义并验证 nameref 涉及的变量 $PATH :

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

    看看如何 nameref 当我们改变时,变量也会改变 PATH :

    $ 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
  •  1
  •   GabrielOshiro    8 年前
    var_name=$1  #pretend here that the user passed the string "PATH"
    printenv    $var_name
    
        4
  •  0
  •   Brett Allen    10 年前

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

    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".