Как вы можете получить значение переменной, учитывая ее имя в оболочке korn? - PullRequest
2 голосов
/ 16 мая 2009

Есть ли в 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 ]

9 голосов
/ 16 мая 2009
eval `echo '$'$var_name`

echo объединяет '$' с именем переменной внутри $ var_name, eval оценивает его, чтобы показать значение.

EDIT: Выше не совсем верно. Правильный ответ без обратных проб.

eval echo '$'$var_name
1 голос
/ 20 марта 2011

printenv не является встроенным ksh и может присутствовать не всегда. Для более старых версий ksh до ksh93 метод eval 'expression' работает лучше всего.

Мощный метод в 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
1 голос
/ 16 мая 2009
var_name=$1  #pretend here that the user passed the string "PATH"
printenv    $var_name
0 голосов
/ 12 июля 2016

На шаг выше вашего ответа (я потратил много времени, пытаясь найти оба этих ответа). Ниже вы можете экспортировать динамическую переменную, а затем вызывать ее динамически:

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