Как перевести этот цикл `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;
}
Это то, что вы можете рассмотреть, если условие и "инкремент" не являются прямым.