1. ホーム
  2. bash

[解決済み] Bashでの動的な変数名

2022-02-07 16:51:57

質問

bashスクリプトについて混乱しています。

私は以下のコードを持っています。

function grep_search() {
    magic_way_to_define_magic_variable_$1=`ls | tail -1`
    echo $magic_variable_$1
}

コマンドの第一引数を含む変数名を作成し、その値を例えば ls .

そこで、私が欲しいものを説明するために

$ ls | tail -1
stack-overflow.txt

$ grep_search() open_box
stack-overflow.txt

では、どのように定義/宣言すればよいのでしょうか。 $magic_way_to_define_magic_variable_$1 そして、それをスクリプト内でどのように呼び出せばよいのでしょうか。

私が試したのは eval , ${...} , \$${...} しかし、私はまだ混乱しています。

どのように解決するのですか?

コマンド名をキーとする連想配列を使用します。

# Requires bash 4, though
declare -A magic_variable=()

function grep_search() {
    magic_variable[$1]=$( ls | tail -1 )
    echo ${magic_variable[$1]}
}

連想配列が使えない場合(たとえば bash 3) を使用することができます。 declare を使用して、動的な変数名を作成します。

declare "magic_variable_$1=$(ls | tail -1)"

で、その値にアクセスするために間接的なパラメータ展開を使用します。

var="magic_variable_$1"
echo "${!var}"

BashFAQを参照してください。 Indirection - 間接変数/参照変数を評価する .