Как получить значение переменной по ее имени в оболочке Korn?
-
22-08-2019 - |
Вопрос
Есть ли в 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?
Решение
var_name=$1 #pretend here that the user passed the string "PATH"
printenv $var_name
Другие советы
eval `echo '$'$var_name`
echo объединяет '$' с именем переменной внутри $var_name, eval оценивает ее, чтобы показать значение.
РЕДАКТИРОВАТЬ:Вышеописанное не совсем верно.Правильный ответ — без обратных кавычек.
eval echo '$'$var_name
printenv
не является встроенной функцией ksh и может присутствовать не всегда.Для более старых версий ksh, до кш93, метод eval 'expression' работает лучше всего.
Мощным методом в KSH93 является использование косвенных переменных с «nameref» или «typeet -n».
Определите и проверьте имяref переменная, которая относится к $PATH
:
$ nameref indirect=PATH
$ print $indirect
/usr/bin:/usr/sbin
Посмотрите, как имяref переменная меняется, когда мы изменяем 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
На один шаг выше вашего ответа (я потратил много времени, пытаясь найти оба этих ответа).Приведенное ниже позволит вам экспортировать динамическую переменную, а затем динамически вызвать ее:
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".