他のコマンドを実行するために繰り返す配列があります。次の項目に進む前に配列値として実行する最後の作業は、配列値を名前として変数を作成し、他の変数を含む文字列を割り当てることです。
現在私のコードは次のとおりです。
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[@]}"
その前にはセミコロンが必要であることに注意してくださいdo
。for 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