簡単な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
動作しますか?
回答
ivからのfor
ループの構文id = “5afd81afc1″>
マニュアルページは
for name [ [ in [ word ... ] ] ; ] do list ; done
bash
マニュアルページ: “コマンドを区切るために、セミコロンではなく1つ以上の新しい行のシーケンスがリストに表示される場合があります。”
ただし、その逆は当てはまりません。できません。ニューラインを任意に置き換えるセミコロン付き。上記の構文規則に従い、do
の後に余分なセミコロンを挿入しない限り、複数行のスクリプトを1行に変換できます。
for i in `seq 1 10`; do echo $i; done
コメント
- @ dr01が指摘したように、最後のスクリプトが間違っています。。
- @jake、これは、
do
の後のセミコロンを削除する必要があることも示しています。さらに、この回答は、「do 'の後にセミコロンを削除する必要がある理由について説明しています。 -
$i
はファイル名の一部である必要がありますか?二重引用符が必要ですか? - 構文"に従って、
filename_${i}
を実行してから - @ user4556274を実行します。 div> for i do; done "も同様に機能するはずです。なぜ'そうしないのですか?
回答
セミコロンdo
の後はエラーであり、存在しないはずです。
以下は正しく機能します:
for i in `seq 1 10`; do echo $i; done