¿Cómo se puede obtener el valor de una variable dada su nombre en el shell Korn?

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

  •  22-08-2019
  •  | 
  •  

Pregunta

¿Hay alguna manera en ksh para obtener el valor de una variable cuando se le ha dado el nombre de la variable?

Por ejemplo:

#!/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?
¿Fue útil?

Solución

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

Otros consejos

eval `echo '$'$var_name`

echo concatena un '$' al nombre de variable en el interior $ var_name, eval evalúa para mostrar el valor.

EDIT: Lo anterior no es del todo bien. La respuesta correcta es sin acentos abiertos.

eval echo '$'$var_name

printenv no es un ksh orden interna y puede no siempre estar presente. Para versiones anteriores ksh, antes de la ksh93 , el método de 'expresión' la función eval funciona mejor.

Un método poderoso en ksh93 es utilizar las variables de indirección con 'nameref' o 'componer -n'.

Definir y verificar un nameref variable que hace referencia a $PATH:

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

Vea cómo el nameref variable cambia cuando cambiamos PATH:

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

Ver versión ksh y el alias nameref:

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

En un paso por encima de su respuesta (yo pasamos mucho tiempo tratando de encontrar estas dos respuestas). El siguiente le permitirá exportar una variable dinámica y luego recordar que de forma dinámica:

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".
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top