¿Cómo se puede obtener el valor de una variable dada su nombre en el shell Korn?
-
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?
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".