【问题标题】:How do I translate this `for` loop for the fish shell?如何为鱼壳翻译这个“for”循环?
【发布时间】:2014-01-02 01:54:47
【问题描述】:

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

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

我可以在 Fish 中找到的有关 for 循环的唯一文档是 this kind。我将如何在 Fish 中执行此操作?

【问题讨论】:

    标签: fish


    【解决方案1】:

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

    以下是我的做法,尽管我认为还有更好的方法:

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

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

    【讨论】:

    • 这是对的,除了变量应该匹配:for i in (seq $COLUMNS); printf $i; end
    • @ridiculous_fish:实际上$1 是传递给该循环所在函数的其他内容...我在发布此内容时没有意识到它应该是$argv[1]。我实际上并不关心 $CHAR 或 $i,我只是使用seq 在屏幕上打印$argv[1] 中的字符,每列一次。我会更新答案...
    【解决方案2】:

    我相信@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;
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多