コマンドラインでforループを作成する方法は?

コマンドラインでforループを作成する方法は?

簡単に見てみましょうfor loop

#!/bin/bash

for i in `seq 1 10`;
do
    echo $i
done

Bashスクリプトのセミコロンは、シェルが現在のコマンドを同期的に実行した後に次のコマンドに移動するようにします。 Enterキーを押すと、バッファをすぐにフラッシュするために次のコマンドを入力できないことを除いて、基本的に同じことが行われます。

それでは、シェルが次の行を解釈できないのはなぜですか?

for i in `seq 1 10`; do; echo $i; done

これはfor loop実際にどのように機能しますか?

答え1

forマニュアルページの繰り返し構文はbash次のとおりです。

for name [ [ in [ word ... ] ] ; ] do list ; done

セミコロンは、マニュアルページの他の部分で説明されているように、キャリッジリターンで置き換えることができますbash。 「コマンドを区別するために、セミコロンの代わりに1つ以上の一連の改行がリストに表示されることがあります。」

しかし、その逆は真実ではありません。改行文字を任意にセミコロンに置き換えることはできません。上記の構文規則に従い、後に追加のセミコロンを挿入しない限り、複数行スクリプトを単一行に変換できますdo

for i in `seq 1 10`; do echo $i; done

答え2

末尾のセミコロンdoはエラーなので発生しないでください。

以下は正しく実行されます。

for i in `seq 1 10`; do echo $i; done 

答え3

試してみてください:

> for name in {Regular,Italic,Bold-Italic}; do echo $name;done
Regular
Italic
Bold-Italic

この要素{1,2,3}支柱の拡張。デフォルトでは、シェルはこの要素を拡張し、forループで生成された各項目を使用します(ねえステント拡張の詳細については参照)。使用しない場合、{}シェルはそれを単一の要素として理解し、1,2,3ループ内で一度だけ渡され、次のようになります。

❯ for name in Regular,Italic,Bold-Italic; do echo $name;done
Regular,Italic,Bold-Italic

これはあなたが期待するものではないかもしれません...

または、中括弧拡張を使用して、次の表記法を使用してシーケンスを生成することもできます。

❯ for i in {1..5}; do echo $i; done
1
2
3
4
5

中かっこ拡張を使用してシーケンスパターンでさまざまな文字列を生成し、forループで次のように使用できることに言及する価値があります。

❯ for i in A{1..5}BC; do echo $i; done
A1BC
A2BC
A3BC
A4BC
A5BC

関連情報