Come si può ottenere il valore di una variabile dato il suo nome nella Korn shell?
-
22-08-2019 - |
Domanda
C'è un modo in ksh per ottenere il valore di una variabile quando ti è stato dato il nome della variabile?
Ad esempio:
#!/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?
Soluzione
var_name=$1 #pretend here that the user passed the string "PATH"
printenv $var_name
Altri suggerimenti
eval `echo '$'$var_name`
echo concatena un '$' per il nome della variabile interna $ nome_var, eval lo valuta per mostrare il valore.
EDIT: Quanto sopra non è giusto. La risposta corretta è senza apici inversi.
eval echo '$'$var_name
printenv
non è un ksh builtin e non possono essere sempre presente. Per le versioni più vecchie ksh, prima di ksh93 , il metodo eval 'espressione' funziona meglio.
Un metodo efficace in ksh93 è quello di utilizzare le variabili indirezione con 'nameref' o 'typeset -n'.
Definire e verificare un nameref variabile che si riferisce a $PATH
:
$ nameref indirect=PATH
$ print $indirect
/usr/bin:/usr/sbin
vedere come il nameref variabile cambia quando cambiamo PATH
:
$ PATH=/usr/bin:/usr/sbin:/usr/local/bin
$ print $indirect
/usr/bin:/usr/sbin:/usr/local/bin
Mostra versione ksh e l'alias per nameref
:
$ type nameref
nameref is an alias for 'typeset -n'
$ echo ${.sh.version}
Version JM 93t+ 2010-02-02
Per un gradino sopra la vostra risposta (ho speso un sacco di tempo cercando di trovare entrambe queste risposte). Il sotto vi permetterà di esportare una variabile dinamica e poi richiamarla in modo dinamico:
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".