2015-01-04 51 views
6

經過在互聯網上的一些搜索,看起來Bash沒有do-while循環。Linux Bash有一個do-while循環嗎?

這是正確的嗎?有沒有可靠的消息來證實這一點(缺乏證據表明有做 - 而循環不是一個參數,沒有一個,也許一個聲明只有不受歡迎)?

是否可以定義自己的指令,從而實現一個do-while循環?有一個算法的方法來轉換一個do-while -loop在,而 -loop,但這是而不是這個問題的範圍。

+2

見:對'while'聲明http://stackoverflow.com/questions/16489809/emulating-do-while-loop-in-bash –

回答

24

bash(或通常的Posix shell)對於後測試循環(通常稱爲「do-while」循環)沒有明確的語法,因爲語法是多餘的。 while複合語句允許您使用相同的語法編寫預測試,後測或中測循環。

這裏的一個殼while環的語義,從Posix

while循環的格式如下:

while compound-list-1 
do 
    compound-list-2 
done 

的化合物列表-1應被執行,並且如果它具有非零退出狀態,那麼while命令應該完成。否則,將執行復合列表2,並重復該過程。

「複合列表」是一系列命令;複合列表的退出狀態是列表中最後一個命令的退出狀態。

這意味着,你能想到一個while循環的爲被寫成如下:

while 
    optional-pre-test-compound-list 
    condition 
do 
    post-test-compound-list 
done 

也就是說,沒有要求的條件立即進行測試跟隨,而關鍵字。所以等同於C的語法:

do statements while (test); 

while statements; test do :; done 

DO和要求的完成之間的:,因爲shell語法不允許空語句。由於:不是元字符,因此它前後必須有空格或元字符;否則,它將被解析爲前一個或後一個標記的一部分。因爲它的解析爲一個命令,它也需要後,分號或換行;否則done被視爲一個參數:

+2

尼斯*黑客*。 1 –

+0

@MarkReed或換行。謝謝,修復。 – rici