Прежде чем я отвечу, есть критическая проблема с вопросом: две последовательности имеют разную длину (есть одиннадцать g
значений, но только десять i
значений). Либо одно из значений g
должно быть пропущено, либо что-то заполнено как дополнительное значение для i
. Для моего ответа я предполагаю, что g
должен работать с 11 до 20, а не 21.
Если вам не нужны все комбинации, тогда вам нужен только один цикл; Хитрость заключается в том, чтобы заставить один l oop повторять обе последовательности одновременно. Есть несколько способов сделать это в bash. Одним из них является сохранение обеих последовательностей в виде массивов, а затем итерация по их индексам:
g_array=( {11..20} ) # Could also use g_array=( $(seq 11 1 20) ) here
i_array=( {1..10} )
for index in "${!g_array[@]}"; do # The ${!arr[2]} gets the *indexes* of the array
cat >"${i_array[index]}.txt" <<EOF
this one is ${g_array[index]}.
EOF
done
В качестве альтернативы, поскольку это просто числовые c последовательности, для этого можно использовать структуру for ((init; test; step))
:
for ((g=11,i=1; g<=20; g++,i++)); do # Note: semicolons between parts, commas between things that happen together
cat >"$i.txt" <<EOF
this one is $g.
EOF
done