変数の値と文字列を結合して別の変数を形成します。

変数の値と文字列を結合して別の変数を形成します。

以下を使用せずに変数内のbash変数を参照したいと思います。

echo "${!VARNAME}"

どんなアイデアがありますか?変数を動的に使用したいのですが、そのような参照が多いので、他の変数として宣言して使用することはできません。

例:

var1=host
${var1}_file ----> host_file is another variable that i want to call in a command. 

ベストアンサー1

shスクリプトを書かない限り、変数ではない(間接bash参照)を使用したくない理由を本当に理解していません。

すでに述べたようにeval動作しますが、一般的に使用が危険になる可能性があるため、眉をひきます。特に、慎重にクリーンアップせずにユーザーから提供されたデータを評価する場合は、さらにそうです。

同じ効果を得るもう1つの方法は、名前参照変数(bashバージョン4.3以降で利用可能)を使用することです。

var1=host

declare -n nameref="${var1}_file"

nameref="something something"

printf '%s\n' "$host_file"

これで文字列が出力されますsomething something。とで動作させるには、typeset -n代替を使用します。declare -nbashksh93

おすすめ記事