Wie kann man den Wert einer Variablen anhand ihres Namens in der Korn-Shell ermitteln?

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

  •  22-08-2019
  •  | 
  •  

Frage

Gibt es in ksh eine Möglichkeit, den Wert einer Variablen abzurufen, wenn Ihnen der Name der Variablen gegeben wurde?

Zum Beispiel:

#!/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?
War es hilfreich?

Lösung

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

Andere Tipps

eval `echo '$'$var_name`

Echo verkettet einen '$' in den Variablennamen in $ var_name, evaluiert es, um den Wert anzuzeigen.

Bearbeiten: Das obige ist nicht ganz richtig. Die richtige Antwort ist ohne Backticks.

eval echo '$'$var_name

printenv ist kein eingebautes ksh und möglicherweise nicht immer vorhanden.Für ältere ksh-Versionen vor ksh93, funktioniert die Methode eval 'expression' am besten.

Eine leistungsstarke Methode in KSH93 ist die Verwendung von Indirektionsvariablen mit 'Nameref' oder 'TypeSet -n'.

Definieren und überprüfen Sie a nameref Variable, auf die Bezug genommen wird $PATH:

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

Sehen Sie, wie die nameref Variable ändert sich, wenn wir uns ändern PATH:

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

KSH-Version und den Alias ​​für anzeigen nameref:

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

Für einen Schritt über Ihrer Antwort (ich habe viel Zeit damit verbracht, diese beiden Antworten zu finden). Im Folgenden können Sie eine dynamische Variable exportieren und anschließend dynamisch erinnern:

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".
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top