Como você pode obter o valor de uma variável dado o seu nome em korn shell?

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

  •  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?
Foi útil?

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".
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top