代码:
path=$PATH:
while [ -n $path ]
do
ls -ld ${path%%:*}
path=${path#*:}
done
我想获取路径的每个部分。运行脚本时,它无法退出while进程。请告诉我为什么。'while [ -n $path ]' 有问题吗?</p>
最终剪切永远不会产生空字符串。如果你有 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
, after 被初始化,将始终检查True
测试[ -n path ]
。这是您永远无法摆脱困境的主要原因while
。