[英]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.