次のような結果があるとします。
echo $A
abc
echo $B
def
echo $abcdef
yesyes
AとBを使って「はい」をどうやって得るのですか?似たようなことを試しています。
${$A$B}
$`echo "$A"$B`
しかし、それは失敗しました。どんな提案がありますか?
答え1
Bashシェルを使用している場合は、中間変数を導入する限り、次のものを使用できます。間接的な:
$ echo $A
abc
$ echo $B
def
$ echo $abcdef
yesyes
それから
$ AB=$A$B
$ echo "${!AB}"
yesyes
変数間接参照は、Bashマニュアル()の**パラメータ拡張*セクションで説明されていますman bash
。
If the first character of parameter is an exclamation point (!), it introduces a level of variable indirection. Bash uses the value of the variable formed from the rest of parameter as the name of the variable; this variable is then expanded and that value is used in the rest of the substitution, rather than the value of parameter itself. This is known as indirect expansion. The exceptions to this are the expansions of ${!prefix*} and ${!name[@]} described below. The exclamation point must immediately follow the left brace in order to introduce indirec‐ tion.
答え2
次のことができます。
$ eval "echo \$$(echo ${A}${B})"
yesyes
上記の一般的な形式はeval "echo \$$(echo ...)
。上記のコードは変数を${A}${B}
文字列に変換しabcdef
、それを文字列として評価しますecho \$abcdef
。
取り外すとeval
中型が見えます。
$ echo \$$(echo ${A}${B})
$abcdef
次にeval
変数を展開します$abcdef
。