Как получить значение переменной по ее имени в оболочке Korn?

StackOverflow https://stackoverflow.com/questions/870860

  •  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".
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top