web-dev-qa-db-ja.com

この「for」ループを魚の殻に変換するにはどうすればよいですか?

スクリプトをZ ShellからFishに翻訳していますが、翻訳の方法がわからない部分があります。

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

Fishで見つけることができるforループの唯一のドキュメントは this kind に関するものです。魚でこれをどのように行うのですか?

23
iconoclast

Fish Shellにはそのようなforループがないようですが、代わりに別の方法をとる必要があります。 (哲学は、可能な限り少数の構文構造と演算子に依存し、可能な限りコマンドを使用することです)。

これが私のやり方ですが、もっと良い方法があると思います:

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

これは関数内に表示されるため、$argv[1]

32
iconoclast

@iconoclastからの答えが正しい答えだと思います。

私は(より良くない)代替案を与えるためにここにいます。

魚の殻を簡単に検索すると、whileループが次の形式で提供されることが示唆されます。

while true
        echo "Loop forever"
end

C/C++ 101と同様に、forループは(主に)whileループに変換できることを学びました。

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

に翻訳する

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

これは、条件と「増分」が単純なものでない場合に考慮できることです。

12
Adrian Shum