如何翻译鱼壳的`for`循环?

时间:2014-01-02 01:54:48

标签: fish

我正在将一个脚本从Z shell翻译成Fish,我有一部分我无法弄清楚如何翻译:

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

我在Fish中找到的for循环的唯一文档是this kind。我怎么会在Fish中这样做?

2 个答案:

答案 0 :(得分:27)

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

我是这样做的,虽然我认为有更好的方法:

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

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

答案 1 :(得分:12)

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

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

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

while true
        echo "Loop forever"
end

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

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

转换为

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

如果条件和“增量”不是直接的,那么你可以考虑这一点。