Korn Shellでその名前を考えると、どのように変数の値を取得できますか?

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

  •  22-08-2019
  •  | 
  •  

質問

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?
役に立ちましたか?

解決

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

他のヒント

eval `echo '$'$var_name`

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

編集:上記は正しくありません。正解はバックティックなしです。

eval echo '$'$var_name

printenv KSHビルドインではなく、常に存在するとは限りません。古いKSHバージョンの場合、前に KSH93, 、eval 'expression'メソッドが最適に機能します。

KSH93の強力な方法は、「Nameref」または「TypeSet -N」で間接変数を使用することです。

定義して検証します ナメレフ を指す変数 $PATH:

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

方法をご覧ください ナメレフ 変更時に変動する変更 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

あなたの答えよりも一歩上で(私はこれらの両方の答えを見つけようとして多くの時間を費やしました)。以下を使用すると、動的変数をエクスポートし、動的にリコールできます。

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".
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top