なぜ「どんなテキストにも」4回ループしますか?


9

これはバグですか、それとも機能ですか?引用符で囲ま
れていない英数字で発生するようです。

GNU bash、バージョン4.1.5の実行

for alpha01234; do echo $((++i)); done

出力:

1
2
3
4

回答:


14

これは、でfor説明されている複合コマンドの機能ですhelp for

for: for NAME [in WORDS ... ] ; do COMMANDS; done

リストの各メンバーに対してコマンドを実行します。

forループは、アイテムのリスト内の各メンバーのためのコマンドのシーケンスを実行します。in WORDS ...;が存在しない場合は、in "$@"想定されます。の各要素についてWORDSNAMEがその要素に設定され、COMMANDSが実行されます。

したがって、引用したコードは、4つのパラメーターで呼び出されたスクリプトで実行される可能性があります。


ありがとう...完全に私を驚かせたのは、コマンドラインで発生したということです。実際にはスクリプトでそれを試していませんでしたset a b c d。最近、しばらく使用したに違いありません。私setはテスト用のスクリプトでその方法をよく使用します。ターミナルを再起動した後、停止しました...(今では理にかなっています)
Peter.O

12

for x; do …のショートカットですfor x in "$@"; do …:位置パラメータを反復します。4回ループする場合は、4つの位置パラメータ($1$4)があることを意味します。

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