はい、はい、おそらく「同じ質問をする人が何百人もいます」と思います。しかし、私は次のことをしたくありません。
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が言ったように、これは一般的に悪い考えなので避けるべきです。インデックス配列の方が良い選択です。