我正在学习通配符递归全球化,并尝试
$ ls **/* | wc -l
15
$ ls */** | wc -l
15他们的结果是一样的。
**/*和*/**之间有什么区别吗?
发布于 2018-10-31 16:16:21
*/**将只匹配目录(及其子目录和文件);它将不匹配当前目录中的文件(非目录),因为它的*/部分在开始**珠星扩展之前需要一个目录前缀。至于**/*,尾随的/*是无关的,因为**本身将扩展到当前目录下的每个文件和目录(但需要dotglob选项)。由于每个目录都已在这一点之前展开,所以尾随的/*不匹配任何内容。
使用ls进行测试时要小心,因为它将“有益”地读入可能传递它的任何目录;相反,请考虑如下所示:
printf "%s\n" */**
printf "%s\n" **/*还请注意,通往wc -l的管道可能会误导您进行实际计算;请考虑:
$ touch a b\nc'
$ ls -1
a
b?c
$ ls | wc -l
3 ## WRONG!https://unix.stackexchange.com/questions/478933
复制相似问题