关于Linux Shell'Whown'命令

时间:2012-04-11 13:26:46

标签: linux shell

代码:

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

我想获得路径的每个部分。当运行脚本时,它无法离开while进程。请告诉我原因。 'while [-n $ path]'中有问题吗?

3 个答案:

答案 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循环的主要原因。