Donal已經提供了問題的答案,I 'd只想對for
命令進行兩點觀察。
for
是非常接近自由形式
- 而不可分割的計數循環是一種典型的利用
for
,這絕不是唯一的選擇
的for
命令有大綱
forstarttest下體
其中開始,下,和體是命令串(即適合作爲eval
的參數;它們可以是空的,包含單個命令或者是完整的腳本)並且test是一個布爾表達式字符串(即適合作爲參數來對expr
和進行求值,以評估某些被強制爲或可以被強制爲布爾值的東西)。
通常,開始用於設立測試和身體和下一個應該把狀態逐漸接近其測試返回一個錯誤的值,但是這只是一個約定,而不是要求。以下是完全有效的(而臭)調用:
for {set n 0 ; puts -nonewline X} {[incr n] < 5} {puts -nonewline X} {
puts -nonewline [string repeat - $n]
}
for {set f [open foo.txt] ; set n 0} {$n >= 0} {puts $line} {
set n [chan gets $f line]
}
給for
命令字符串和布爾表達式的任意組合,它將運行。它可能永遠執行它的身體,甚至不會執行一次,但它會運行。不要將自己限制爲for {set i 0} {$i < 10} {incr i} {...}
調用,那是1950年代的想法。
即使你只是想用它來計算循環,還是有很多的選擇,例如:
for {set i 0} {$i < $limit} {incr i} {...} ;# simple increment
for {set i 0} {$i < $limit} {incr i $n} {...} ;# stepping increment/decrement
for {set i 0} {$i < $limit} {incr i $i} {...} ;# doubling increment
for {set i 0} {$i < $limit} {set i [expr {...}]} {...} ;# arbitrary change
釋放你的心靈,其餘的將隨之而來。
文檔:chan,expr,for,incr,open,puts,set,string