bashの他の変数に変数を含める

bashの他の変数に変数を含める

Bashでループを作成しており、ある変数を別の変数にラップしたいと思います。

  printf "Number of volumes to add: "
  read -r num_volumes
  for volume_number in "$num_volumes"
  do
    vol_id_{$volume_number}="create_volume"
  done

これは正しい構文ですか?

答え1

まず、などの変数を使いたい場合にはfoo_1使用foo_2しないでください。使用大量に代わりに:

foo=()
foo[0]=123; foo[1]=456;
printf "%s\n" "${foo[@]}"

または数字以外のキーが必要な場合は、連想配列:

declare -A bar=()
bar[abc]=123; bar[def]=456;
for key in "${!bar[@]}"; do echo "$key: ${bar[$key]}"; done

コードの場合、for volume_number in "$num_volumes"ループ本体は一度実行され、volume_numberに設定されますnum_volumes。引用符は分割を避けるため、num_volumes1単語だけ繰り返すことforができます。プロンプトと変数名の多くを参照していることを考えると、おそらく分割したくないので、代わりに数字のリストを繰り返すことになります。

read num
vars=()
for (( i=0; i < num; i++ )); do
    vars[i]="some value for $i"
done

関連情報