bash - タイトルが変数であり、他の変数を含む文字列値を持つ変数を生成できますか?

bash - タイトルが変数であり、他の変数を含む文字列値を持つ変数を生成できますか?

他のコマンドを実行するために繰り返す配列があります。次の項目に進む前に配列値として実行する最後の作業は、配列値を名前として変数を作成し、他の変数を含む文字列を割り当てることです。

現在私のコードは次のとおりです。

for i in ${array[@]} do
    some command
    $i_value="my string including other variables ${other_variable}"
done
echo $i_value

これを実行すると、次のエラーが発生し、配列値(インポートされた値)で変数を生成するのではなく、ファイルを見つける理由がわかりません。

line 5: *value*_value=my string including other variables *other_variable*: no such file or directory.

答え1

foo_value変数などを外部で生成する必要がなく、単にスクリプトで使用する必要があるbar_value場合は、連想配列を使用する必要があります。このように:

declare -A values
for i in "${array[@]}"; do
    # some commands...
    values[$i]="my string including other variables ${other_variable}"
done
echo "${values[$i]}"

# loop over the keys:
for key in "${!values[@]}"; do
    echo "values has key '$key'"
done

(スペースとワイルドカードを含む値を適切に処理するには、周囲に引用符を付けたいので、"${array[@]}"その前にはセミコロンが必要であることに注意してくださいdofor i in ...; do

答え2

ただexport組み込みのものを使用してください...

はい(付随する利点:アクセスに動的変数名を使用します;-p)

~$ cat test.sh 
#!/bin/bash

toto="coincoin"
tata="cuicui"

for var in toto tata; do
    export coincoin_${!var}="${var}"
done

echo "${coincoin_cuicui}"
echo "${coincoin_coincoin}"

~$ ./test.sh 
tata
toto

関連情報