使用 ls 实用程序时,(?) 是什么意思?

使用 ls 实用程序时,(?) 是什么意思?

我正在使用LS实用程序和我的命令如下所示:

$ ls x?[a-c]*

这样的命令的输出是什么?到目前为止,我理解(并且我希望这是正确的)它将列出以下项目:

  • 以 x 开头
  • 第三个字母是 {a,b,c}
  • 第三个字母之后的任何内容(无关紧要)都包含在内

我的问题是,什么是(问号)代表什么情况?

先感谢您。

答案1

它不是一个ls功能,它是一个bash功能,它在“模式匹配”部分中进行了描述重击(1):

特殊模式字符的含义如下:

*

      匹配任何字符串,包括空字符串。当。。。的时候globstarshell 选项已启用,并且 *用于路径名扩展上下文中,两个相邻的*用作单个模式将匹配所有文件以及零个或多个目录和子目录。如果后面跟着一个/, 两个相邻的 *s 将仅匹配目录和子目录。
?
      匹配任何单个字符。
[...]
      匹配任何一个包含的字符。由连字符分隔的一对字符表示范围表达式;使用当前语言环境的整理序列和字符集,匹配位于这两个字符之间的任何字符(包括这两个字符)。如果后面的第一个字符 [ 是一个! 或一个^那么任何未包含的字符都会被匹配。范围表达式中字符的排序顺序由当前区域设置和LC_COLLATE或者LC_ALLshell 变量(如果已设置)。为了获得范围表达式的传统解释,其中[a-d]相当于[abcd],设定值 LC_ALL 外壳变量为 C,或启用 globasciiranges外壳选项。 A-可以通过将其作为集合中的第一个或最后一个字符来进行匹配。 A]可以通过将其作为集合中的第一个字符来进行匹配。

您的理解也不完全正确 -?表示任何单个字符,因此表达式x?[a-c]*将匹配xQcFoo.bar,xmabc而且- 重点是这也可能是第二个字母,x1a而不仅仅是第三个字母。命令的输出将是匹配模式的文件列表 。或者,如果没有这样的文件,shell 将不会用任何内容替换,因此将尝试列出字面名称为.xabc{a,b,c}ls x?[a-c]*x?[a-c]*x?[a-c]*lsx?[a-c]*

相关内容