Comment pouvez-vous obtenir la valeur d'une variable donnée son nom dans korn shell?

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

  •  22-08-2019
  •  | 
  •  

Question

Y at-il un moyen ksh pour obtenir la valeur d'une variable lorsque vous avez donné le nom de la variable?

Par exemple:

#!/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?
Était-ce utile?

La solution

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

Autres conseils

eval `echo '$'$var_name`

echo concaténer un '$' au nom de la variable à l'intérieur de var_name $, eval évalue pour montrer la valeur.

EDIT: Ce qui précède n'est pas tout à fait raison. La bonne réponse est sans contre-apostrophes.

eval echo '$'$var_name

printenv est pas un ksh builtin et ne peut pas toujours être présents. Pour les versions plus anciennes ksh, avant ksh93 , le

méthode eval 'expression' qui fonctionne le mieux.

Une méthode puissante dans ksh93 est d'utiliser des variables d'indirection avec 'nameref' ou '-n typeset'.

Définir et vérifier une nameref variable qui fait référence à $PATH:

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

Voyez comment nameref variable change quand on change PATH:

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

Voir version ksh et l'alias nameref:

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

Pour un cran au dessus de votre réponse (j'ai passé beaucoup de temps à essayer de trouver ces deux réponses). Le ci-dessous vous permettra d'exporter une variable dynamique puis rappeler dynamiquement:

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".
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top