簡単に見てみましょう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