var
戻り値がVAR1
($var
値付き)の変数()がありますVAR1
。定義された入力ファイルがありますVAR1
(VAR1=ABCDEF
)。
echo
値を取得するにはどうすればよいですか?ABCDEF
$var
他の多くのオプションを試しましたが、常に出力はorecho $(echo $var)
になりますが、決してそうではありません。私はそれを宣言されたファイルで使用し、コマンドプロンプトで試してみました。VAR1
echo VAR1
ABCDEF
source
VAR1
答え1
bash
シェルを使用しているとします。
$ source ./file
$ echo "$VAR1"
ABCDEF
$ var=VAR1
$ echo "${!var}"
ABCDEF
${!var}
あなたを使って可変間接存在するbash
。変数の値は、var
拡張する変数の名前を取得するために使用されます。
bash
名前で変数を参照することもできます。
$ source ./file
$ echo "$VAR1"
ABCDEF
$ declare -n var="VAR1"
$ echo "$var"
ABCDEF
ここで変数は変数var
を参照するので、拡張されるすべての項目に展開されます。VAR1
$var
$VAR1
名前参照は、元々宣言ksh
されたシェルの機能でしたtypeset -n
。
名前参照は、シェル関数を呼び出すときに配列への参照を渡すのに役立ちます。
すべてのsh
シェルで:
$ . ./file
$ echo "$VAR1"
ABCDEF
$ var=VAR1
$ eval "echo \"\$$var\""
ABCDEF
このeval
ユーティリティは再評価する文字列を使用します。ここでは文字列を提供しますecho "$VAR1"
(拡張後$var
)。
問題は、eval
誤ってパラメータ文字列を生成するとエラーや脆弱性が発生しやすいことです。
答え2
を使用すると仮定すると、間接bash
参照を使用してこれを簡単に実行できます。
$ foo=bar
$ bar=magicword
$ printf "%s\n" "${!foo}"
magicword
構文$var
(または${var}
)は変数の内容を生成しますvar
。
${!var}
変数の内容を生成する構文にちなんで命名 var
。