【发布时间】: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
我正在将一个脚本从 Z shell 翻译成 Fish,而这一部分我不知道如何翻译:
for (( i=0; i < $COLUMNS; i++ )); do
printf $1
done
我可以在 Fish 中找到的有关 for 循环的唯一文档是 this kind。我将如何在 Fish 中执行此操作?
【问题讨论】:
标签: fish
Fish shell 似乎没有那种for 循环,而是需要您采取不同的方法。 (其哲学显然是尽可能少地依赖句法结构和运算符,并尽可能多地使用命令。)
以下是我的做法,尽管我认为还有更好的方法:
for CHAR in (seq $COLUMNS)
printf $argv[1]
end
这出现在函数内部,因此是 $argv[1]。
【讨论】:
for i in (seq $COLUMNS); printf $i; end
$1 是传递给该循环所在函数的其他内容...我在发布此内容时没有意识到它应该是$argv[1]。我实际上并不关心 $CHAR 或 $i,我只是使用seq 在屏幕上打印$argv[1] 中的字符,每列一次。我会更新答案...
我相信@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;
}
如果条件和“增量”不是直截了当的,您可以考虑这一点。
【讨论】: