簡體   English   中英

關於Linux Shell的“ While”命令

[英]about the Linux Shell 'While' command

碼:

path=$PATH:
while [ -n $path ]
do 
ls -ld ${path%%:*}
path=${path#*:}
done

我想獲取路徑的各個部分。運行腳本時,它無法退出while進程。請告訴我原因。 'while [-n $ path]'時有問題嗎?

最終剪切絕不會導致空字符串。 如果您有a:b:c,則將a和b剝離掉,但不要剝離c。 即,這:

${path#*:}

路徑的最后一部分總是會產生一個非空字符串。 由於-n檢查查找空字符串,因此循環將永遠運行。

如果$path中沒有冒號,則${path#*:}將返回$path 所以你有一個無限循環。

p="foo"
$ echo ${p#*:}
foo
$ p="foo:bar"
$ echo ${p#*:}
bar

您的代碼中有一些錯誤。 這應該可以解決問題:

path=$PATH
while [[ $path != '' ]]; do
    # you can replace echo to whatever you need, like ls -ld
    echo ${path%%:*}
    if echo $path | grep ':' >/dev/null; then 
        path=${path#*:}
    else path=''
    fi
done

初始化后,您的path將始終為[ -n path ]測試檢查True 這是您永遠不會退出while循環的主要原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM