代码:
path=$PATH:
while [ -n $path ]
do
ls -ld ${path%%:*}
path=${path#*:}
done
我想获得路径的每个部分。当运行脚本时,它无法离开while进程。请告诉我原因。 'while [-n $ path]'中有问题吗?
答案 0 :(得分:4)
最终剪辑永远不会导致空字符串。如果你有一个:b:c,你将剥离a然后是b,但绝不是c。即,这个:
${path#*:}
将始终为最后一段路径生成非空字符串。由于-n检查查找空字符串,因此您的循环将永远运行。
答案 1 :(得分:0)
如果$path
中没有冒号,${path#*:}
将返回$path
。所以你有一个无限循环。
p="foo"
$ echo ${p#*:}
foo
$ p="foo:bar"
$ echo ${p#*:}
bar
答案 2 :(得分:0)
您的代码中存在一些错误。这应该可以解决问题:
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
初始化后,将始终检查True
进行[ -n path ]
测试。这是你永远不会离开while
循环的主要原因。