Comment pouvez-vous obtenir la valeur d'une variable donnée son nom dans korn shell?
-
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?
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
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".