while [ -n "$1" ]; 開始的迴圈何時開始執行?

while [ -n "$1" ]; 開始的迴圈何時開始執行?

我有一個以 while 循環開頭的 shell 腳本

while [ -n "$1" ]; do

我知道 that$1指的是腳本名稱後面的參數,即firstargument,當我執行時./myscript.sh firstargument。是做什麼的-n

答案1

-n是對非空字串的測試。

如果"$1"擴展為空字串,則該特定測試失敗且循環將不會執行。

這是可能循環體包含shift將下一個位置參數移入的語句$1,並以這種方式循環遍歷腳本的參數,直到找到空參數或到達參數列表的末端。

test實用程式相當於[,但[要求最後一個參數是]

測試也可以寫成

while test -n "$1"; do

[和都test可能內建在您的 shell 中,但也應該在標準路徑(如/bin.

您將能夠在man test以及 shell 手冊(因為它是內建實用程式)中閱讀有關此測試和其他測試的更多資訊。

此次-n測試也是其中之一標準測試,因此也列出在test實用程式的 POSIX 標準


如果這個循環應該循環結束全部shell 腳本的參數,如果參數為空,則可能無法執行此操作:

$ sh -c 'while [ -n "$1" ]; do printf "arg: %s\n" "$1"; shift; done' sh 1 2 3 "" 4 5 6
arg: 1
arg: 2
arg: 3

相反,它應該使用類似的東西

for arg do
    if [ -n "$arg" ]; then
        # do something with "$arg"
    fi
done

……顯然取決於腳本的作用。

相關內容