Como você pode obter o valor de uma variável dado o seu nome em korn shell?
-
22-08-2019 - |
Pergunta
Existe uma maneira em ksh para obter o valor de uma variável quando lhe foi dado o nome da variável?
Por exemplo:
#!/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?
Solução
var_name=$1 #pretend here that the user passed the string "PATH"
printenv $var_name
Outras dicas
eval `echo '$'$var_name`
Echo concatena um '$' para o nome da variável dentro de $ var_name, avalia o avalia para mostrar o valor.
EDIT: O acima não está certo. A resposta correta é sem backticks.
eval echo '$'$var_name
printenv
não é um ksh internos e não pode estar sempre presente.Para mais antigos ksh versões, antes de ksh93, o eval 'expressão' método funciona melhor.
Um método poderoso na ksh93 é a utilização de variáveis de indireção com 'nameref' ou 'pronta-n'.
Definir e verificar uma nameref variável que se refere a $PATH
:
$ nameref indirect=PATH
$ print $indirect
/usr/bin:/usr/sbin
Veja como o nameref variável muda quando nós mudamos PATH
:
$ PATH=/usr/bin:/usr/sbin:/usr/local/bin
$ print $indirect
/usr/bin:/usr/sbin:/usr/local/bin
Mostrar ksh versão e o alias para nameref
:
$ type nameref
nameref is an alias for 'typeset -n'
$ echo ${.sh.version}
Version JM 93t+ 2010-02-02
Por um passo acima da sua resposta (passei muito tempo tentando encontrar essas duas respostas). O abaixo permitirá que você exporte uma variável dinâmica e, em seguida, lembre -a dinamicamente:
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".