2

変数の名前が与えられたときに、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?
4

4 に答える 4

9
eval `echo '$'$var_name`

echo は $var_name 内の変数名に '$' を連結し、eval はそれを評価して値を表示します。

編集:上記はまったく正しくありません。正解はバッククォートなしです。

eval echo '$'$var_name
于 2009-05-15T21:12:14.200 に答える
2

printenvksh 組み込みではなく、常に存在するとは限りません。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
于 2011-03-20T01:09:26.150 に答える
1
var_name=$1  #pretend here that the user passed the string "PATH"
printenv    $var_name
于 2009-05-16T06:31:30.907 に答える