30

我正在将一个脚本从 Z shell 翻译为 Fish,而我有这一部分我不知道如何翻译:

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

for我可以在 Fish 中找到的唯一循环文档就是这种。我将如何在 Fish 中执行此操作?

4

2 回答 2

42

Fish shell 似乎没有那种for循环,而是需要您采取不同的方法。(其哲学显然是尽可能少地依赖句法结构和运算符,并尽可能多地使用命令。)

这是我的做法,尽管我认为有更好的方法:

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

这出现在函数内部,因此$argv[1].

于 2014-01-02T02:09:32.353 回答
14

我相信@iconoclast 的答案是正确的答案。

我在这里只是为了提供一个(不是更好的)替代方案。

在 fish shell 中的简短搜索似乎表明它提供了以下形式的 while 循环:

while true
        echo "Loop forever"
end

在 C/C++ 101 中,我们了解到 for 循环可以(大部分)通过以下方式转换为 while 循环:

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

翻译成

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

如果条件和“增量”不是直截了当的,这就是您可以考虑的。

于 2014-01-02T02:25:49.477 回答