Bash - 変数名に変数を使用する方法

Bash - 変数名に変数を使用する方法

はい、はい、おそらく「同じ質問をする人が何百人もいます」と思います。しかし、私は次のことをしたくありません。

foo="example1"
bar="example2"
foobar="$foo$bar"

私はこれをしようとしています:

foo="example1"
$foo="examle2"

ただし、これを試みるたびに、次のエラーメッセージが表示されます。

bash: example1=example2: command not found

どんな提案がありますか?可能ですか?

答え1

ここにいくつかの例があります。

declare [-g] "${foo}=example2"
declare -n foo='example1'
foo='example2'
eval "${foo}=example2"
mapfile -t "${foo}" <<< 'example2'
printf -v "${foo}" '%s' 'example2'
IFS='' read -r "${foo}" <<< 'example2'
typeset [-g] "${foo}=example2"

他のユーザーが言ったように、evalこの一般的に間接的な割り当てに注意してください。

答え2

を使用できますeval

eval $foo="examle2"

$foo信頼できる価値について自信を持っている必要があることに注意してください。

より良い選択肢は、任意のコマンドを実行するリスクがないようにインデックス配列を使用することです。

答え3

suffix=bzz
declare -g prefix_$suffix=mystr

...それから...

varname=prefix_$suffix
echo ${!varname}

恥ずかしく盗んだここ

編集:Stephenが言ったように、これは一般的に悪い考えなので避けるべきです。インデックス配列の方が良い選択です。

関連情報