关于Linux Shell';而';命令
代码:关于Linux Shell';而';命令,linux,shell,Linux,Shell,代码: 我想获取路径的每个部分。当运行脚本时,它无法脱离while进程。请告诉我原因。“while[-n$path]”中有问题吗?最终剪切不会产生空字符串。如果你有a:b:c,你会先去掉a,然后去掉b,但永远不会去掉c。即: path=$PATH: while [ -n $path ] do ls -ld ${path%%:*} path=${path#*:} done 将始终为路径的最后一段生成非空字符串。由于-n检查查找空字符串,因此循环将永远运行。最终剪切不会导致空字符串。如果你有a:
我想获取路径的每个部分。当运行脚本时,它无法脱离while进程。请告诉我原因。“while[-n$path]”中有问题吗?最终剪切不会产生空字符串。如果你有a:b:c,你会先去掉a,然后去掉b,但永远不会去掉c。即:
path=$PATH:
while [ -n $path ]
do
ls -ld ${path%%:*}
path=${path#*:}
done
将始终为路径的最后一段生成非空字符串。由于-n检查查找空字符串,因此循环将永远运行。最终剪切不会导致空字符串。如果你有a:b:c,你会先去掉a,然后去掉b,但永远不会去掉c。即:
path=$PATH:
while [ -n $path ]
do
ls -ld ${path%%:*}
path=${path#*:}
done
将始终为路径的最后一段生成非空字符串。由于-n检查查找空字符串,因此循环将永远运行。如果
$path
中没有冒号,${path\*:}
将返回$path
。所以你有一个无限循环
${path#*:}
如果
$path
中没有冒号,${path}*:}
将返回$path
。所以你有一个无限循环
${path#*:}
您的代码中有一些bug。这应该可以做到:
p="foo"
$ echo ${p#*:}
foo
$ p="foo:bar"
$ echo ${p#*:}
bar
您的
路径
初始化后,将始终检查True
中的[-n路径]
测试。这是您在循环时始终无法退出的主要原因。
您的代码中有一些错误。这应该可以做到:
p="foo"
$ echo ${p#*:}
foo
$ p="foo:bar"
$ echo ${p#*:}
bar
您的路径
初始化后,将始终检查True
中的[-n路径]
测试。这就是为什么你在循环中始终无法摆脱的主要原因。
很抱歉,我忘了在代码'path=$path'之后添加':'奇怪,现在我明白你的意思了。好吧,试试-z$path
而不是-n$path
。看起来不错。啊,现在我明白了。您需要在变量周围加引号:-n“$path”
如果不加引号,它将等价于“而[-n]
当$path为空时。这是正确的。感谢您的帮助。我想知道当我忘记添加引号时,为什么循环仍然输出“.”但是你说$path是空的。很抱歉,我忘了在代码'path=$path'后面加上':'。奇怪,现在我明白你的意思了。好吧,试试-z$path
而不是-n$path
。看起来不错。啊,现在我明白了。您需要在变量周围加引号:-n“$path”
如果不加引号,它将等价于“而[-n]
当$path为空时。这是正确的。感谢您的帮助。我想知道当我忘记添加引号时,为什么循环仍然输出“.”但是,您说$path为空。echo$path | tr:“\012”|同时读取d;do ls-ld${d:-.};doneecho$PATH | tr:“\012”|同时读取d;do ls-ld${d:-.};完成