変数の名前が与えられたときに、ksh で変数の値を取得する方法はありますか?
例えば:
#!/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?
変数の名前が与えられたときに、ksh で変数の値を取得する方法はありますか?
例えば:
#!/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?
eval `echo '$'$var_name`
echo は $var_name 内の変数名に '$' を連結し、eval はそれを評価して値を表示します。
編集:上記はまったく正しくありません。正解はバッククォートなしです。
eval echo '$'$var_name
printenv
ksh 組み込みではなく、常に存在するとは限りません。ksh93より前の古い ksh バージョンでは、 eval 'expression' メソッドが最適に機能します。
ksh93 の強力な方法は、「nameref」または「typeset -n」で間接変数を使用することです。
を参照するnameref変数を定義して検証し$PATH
ます。
$ nameref indirect=PATH
$ print $indirect
/usr/bin:/usr/sbin
を変更するとnameref変数がどのように変化するかを確認しPATH
ます。
$ PATH=/usr/bin:/usr/sbin:/usr/local/bin
$ print $indirect
/usr/bin:/usr/sbin:/usr/local/bin
の ksh バージョンとエイリアスを表示しnameref
ます。
$ type nameref
nameref is an alias for 'typeset -n'
$ echo ${.sh.version}
Version JM 93t+ 2010-02-02
var_name=$1 #pretend here that the user passed the string "PATH"
printenv $var_name