热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

双星号通配符是什么意思?

如何解决《双星号通配符是什么意思?》经验,为你挑选了2个好方法。

我已经尝试了以下命令,但我无法解释它:

ls **

但我不确定它输出的确切原因以及为什么会产生结果.



1> Keith Thomps..:

它可能正在使用某些shell的特殊功能来**进行递归匹配,而不是单个*,它只在当前目录中匹配.

通配符*匹配.当前目录中的任何文件或目录(其名称不以其开头).

取决于您正在使用的shell以及** 可能与之相同的设置*; 它可以匹配零个或多个字符后跟零个或多个字符,这与仅匹配零个或多个字符相同.

但是有些shell,有一些设置,**是一个递归版本*,匹配当前目录和子目录中的所有文件和目录.

引用bash手册:

`*'
匹配任何字符串,包括空字符串.当启用`globstar'hell选项,并且在文件名扩展上下文中使用`*'时,用作单个模式的两个相邻`*将匹配所有文件以及零个或多个目录和子目录.如果后跟一个`/',则两个相邻的``*'将只匹配目录和子目录.

仅当globstar通过以下方式设置选项时,此方法才有效

shopt -s globstar

(默认情况下禁用)并且仅在相对较新版本的bash.

我相信zsh也支持这种语法.

重要的是要记住,通配符是由shell扩展的,而不是ls命令扩展的.如果您键入ls **,或ls *.txt,在ls命令本身不会看到*字符; 它只能看到扩展的文件列表,就像您在命令行上输入了整个列表一样.


这应该是批准的答案!

2> 小智..:

其他答案已经很好地涵盖了这个特定通配符的确切行为,但有关一般情况的信息可能很有用.

此行为不限于ls,并且被称为"globbing",它是基于与现有文件名匹配的模式扩展.请务必注意,这些模式不使用正则表达式语法.

shell在将参数发送到程序之前对其进行预处理.通常有多个级别的扩展,其中一些涉及通配.

有关文件glob模式中可用的其他通配符的更多信息的一个很好的资源是unix手册页.可以在这里找到glob的在线版本.

最后,一个简单的例子说明这可以为你做什么,特别是当与其他shell扩展好东西结合使用时,在这种情况下由bashshell 提供.有关此示例中使用的扩展的信息可以在Bash初学者指南中找到- 这是我的goto资源,尽管有标题.

ls *{01..04}.{txt,csv}ls *01.txt *01.csv *02.txt *02.csv *03.txt *03.csv *04.txt *04.csv

哪个可以输出这样的东西:

input_01.txt input_02.txt input_03.txt input_04.txt output_01.csv output_02.csv output_03.csv output_04.csv

跳过这些:

input_05.txt input_06.txt input_07.txt input_08.txt input_09.txt input_10.txt output_05.csv output_06.csv output_07.csv output_08.csv output_09.csv output_10.csv

一个简单的例子,但如果你知道这种行为是不特定ls,那么你能想象的实用程序时加上mv,cp,rsync,等.


推荐阅读
author-avatar
VW旻shi只吃货8453
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有