經過在互聯網上的一些搜索,看起來Bash沒有do-while循環。Linux Bash有一個do-while循環嗎?
這是正確的嗎?有沒有可靠的消息來證實這一點(缺乏證據表明有做 - 而循環不是一個參數,沒有一個,也許一個聲明只有不受歡迎)?
是否可以定義自己的指令,從而實現一個do-while循環?有一個算法的方法來轉換一個do-while -loop在,而 -loop,但這是而不是這個問題的範圍。
經過在互聯網上的一些搜索,看起來Bash沒有do-while循環。Linux Bash有一個do-while循環嗎?
這是正確的嗎?有沒有可靠的消息來證實這一點(缺乏證據表明有做 - 而循環不是一個參數,沒有一個,也許一個聲明只有不受歡迎)?
是否可以定義自己的指令,從而實現一個do-while循環?有一個算法的方法來轉換一個do-while -loop在,而 -loop,但這是而不是這個問題的範圍。
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
被視爲一個參數:
。
尼斯*黑客*。 1 –
@MarkReed或換行。謝謝,修復。 – rici
不,bash沒有do-while
循環。 manual部分3.2.4.1 Looping Constructs列表until
,while
和for
。 注意沒有do-while
。
見:對'while'聲明http://stackoverflow.com/questions/16489809/emulating-do-while-loop-in-bash –