Как перевести этот цикл `for` для оболочки рыбы?

Я переводил script из Z-оболочки в Fish, и у меня есть эта часть, я не могу понять, как перевести:

  for (( i=0; i < $COLUMNS; i++ )); do
    printf $1
  done

Единственная документация для циклов for, которую я могу найти в Fish, - это этот вид. Как мне это сделать в Fish?

Ответы

Ответ 1

Похоже, что оболочка Fish не имеет такого цикла for, но вместо этого требует от вас другого подхода. (Философия, по-видимому, полагается на максимально возможное количество синтаксических структур и операторов и делает как можно больше команд.)

Вот как я это сделал, хотя я предполагаю, что есть лучшие способы:

for CHAR in (seq $COLUMNS)
  printf $argv[1]
end

Это появляется внутри функции, поэтому $argv[1].

Ответ 2

Я считаю, что ответ от @iconoclast является правильным ответом здесь.

Я здесь, чтобы дать альтернативу (не лучше).

Краткий поиск в раковине рыбы предполагает, что он обеспечивает цикл while в виде:

while true
        echo "Loop forever"
end

Как и в C/С++ 101, мы узнали, что цикл может быть (в основном) переведен в цикл while:

for (A; B; C) {
  D;
}

переводится на

A;
while (B) {
  D;
  C;
}

Это то, что вы можете рассмотреть, если условие и "инкремент" не являются прямым.