Во-первых, если у вас возникнет соблазн использовать такие переменные, как 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_volumes
, поэтому для for
есть только одно слово, которое нужно зациклить. Учитывая, что ваше приглашение и имя переменной ссылаются на число чего-то, вы, вероятно, даже не хотите разделять, а хотите перебирать список чисел:
read num
vars=()
for (( i=0; i < num; i++ )); do
vars[i]="some value for $i"
done