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


22

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

#!/bin/bash

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

bashスクリプトのAFAIKセミコロンは、シェルに現在のコマンドを同期的に実行させてから、次のコマンドに進みます。Enterキーを押すと文字通り同じことを行いますが、次のコマンドを入力できず、バッファーをすぐにフラッシュできます。

シェルが次の行を解釈できない理由

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

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

回答:


16

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

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

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

ただし、その逆は当てはまりません。改行をセミコロンで勝手に置き換えることはできません。上記の構文規則を遵守し、do:の後に余分なセミコロンを挿入しない限り、複数行のスクリプトを1行に変換できます。

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

2
@ dr01が指摘したように、最後のスクリプトは間違っていますdo。その後にセミコロンを削除する必要があります。
ジェイク

1
@jake、これは、後にセミコロンを削除する必要があることも示していますdo。さらに、この回答は「do」の後にセミコロンを削除する必要がある理由を説明しています。
user4556274

$iファイル名の一部にする必要がある場合はどうなりますか?二重引用符が必要ですか?
匿名

18

後のセミコロンdoはエラーであり、そこにあるべきではありません。

以下が正常に機能します。

for i in `seq 1 10`; do echo $i; done 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.