Рассмотрим следующую серию вложенных циклов 1 :
for TEXT in "$BTEXT" "$BTEXT $BTEXT"; do
for GRAVITY in NorthWest SouthEast Center South; do
for PSIZE in 30 60 90 120; do
# body could be more complex in reality
some_command $TEXT $GRAVITY $PSIZE
done
done
done
Структура каждого l oop одинакова: перебор списка. По сути, все это перебирает кортежи декартового произведения всех списков.
Я хотел бы удалить вложенные циклы, потому что в конечном итоге это становится неустойчивым, так как количество списков растет. В идеале, это так просто, как что-то вроде:
TEXT="$BTEXT" "$BTEXT $BTEXT"
GRAVITY="NorthWest SouthEast Center South"
PSIZE="30 60 90 120"
for TUPLE in #magic here#; do
...
done
Я знаю, что мог бы уменьшить визуальное вложение, например, введя функцию для каждого уровня, но это кажется хуже, чем текущее решение.
1 Да, я знаю, что присвоение TEXT
здесь точно не работает, поскольку не будет различий между пробелами между элементами и внутри элементов, так что, возможно, массивы надо будет.