我在 VS Code 檔案上看到了本教程中的這一行腳本。
while sleep 1000; do :; done
我知道這一行的功能是防止行程退出。但我不明白語法。你能幫忙解釋一下腳本嗎?你對學習破折號語法有什么建議嗎?
uj5u.com熱心網友回復:
該:是一個shell內置的,那代表true。該true命令不執行任何操作并成功(通過回傳 0)。
該while命令遵循以下語法:
while command1 ; do command2 ; done
該command1被執行,并在完成時,外殼會檢查命令成功還是失敗。在第一種情況下,command2執行 ,然后command1再次觸發 ,否則回圈停止。
在您的示例中,sleep 1000等待 1000 秒,成功,然后true被呼叫,然后回圈被一次又一次地呼叫(sleep永遠不會失敗,這是一個無限回圈)。
實際上,這種單行代碼可能對保持腳本活動感興趣,同時運行其他事情,例如協同程式或信號陷阱;這是非常經濟的,因為在此程序中sleep,程序會停止:這里每 1000 秒,程序就會恢復并再次停止。
uj5u.com熱心網友回復:
以下是從https://www.gnu.org/software/bash/manual/bash.html#Shell-Syntax解釋您的問題的一些引述:
while命令的語法是:
while test-commands; do consequent-commands; done只要 test-commands的退出狀態為零,就執行consequent-commands。回傳狀態是在consequent-commands 中執行的最后一個命令的退出狀態,如果沒有執行則為零。
; - 您可以使用分號來分隔陳述句。以分號分隔的命令按順序執行;shell 依次等待每個命令終止。回傳狀態是最后執行的命令的退出狀態。
: - 如果陳述句中包含冒號,則運算子會測驗兩個引數是否存在并且其值不為空;如果省略冒號,則運算子僅測驗是否存在。
uj5u.com熱心網友回復:
該:是shell的空命令。除了評估它的引數和重定向之外,它什么都不做。然后它回傳真。這有兩個用途:
- 當您出于語法原因需要命令,但不想執行任何操作時。
- 當您想要執行某些引數擴展時。
- 截斷一個檔案。
1. 的用例是
while :; do
someCommand
done
這會重復運行 someCommand 直到時間結束。
另一個是
while someCommand; do
:
done
它運行 someCommand直到它失敗。
2. 的一個用例是為變數設定默認值,如
: ${EDITOR:=vi}
EDITOR=vi除非已設定或為空,否則此分配。
3. 的用例是
: >file
截斷檔案。許多 shell 允許非 POSIX 變體,>file但可移植腳本不應依賴它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/328569.html
上一篇:在shell腳本中呼叫鏈碼函式
