如果这是一个潜在的明显问题,我很抱歉,但我不知道这^()
意味着什么
ls ^(*.c|*.md)
在 上zsh
,此参数扩展到除*.c
和*.md
文件之外的所有内容。
- 什么是
^
? ()
在这种情况下括号是什么意思- 该命令
^(*.c||*.md)
也有效...我应该使用|
or||
吗?
答案1
在 Zsh 中,
^
是一个全局运算符EXTENDED_GLOB
设置后可用,匹配任何内容除了以下模式。括号将模式分组;这对于
|
需要括号的析取 ( ) 非常有用,这样析取就不会被解释为管道。^(*.c||*.md)
表示“除了匹配的文件*.c
、名称为空的文件或匹配的文件之外的任何内容*.md
”;空名称是没有用的,所以你应该使用|
.您也可以编写它^*.(c|md)
以避免重复*.
。
您还应该使用--
选项分隔符 for ,ls
否则如果任何文件名以 开头-
,它们将被视为选项ls
。
如果您不打算ls
列出由该 glob 扩展生成的那些恰好属于类型的文件的内容目录,您应该使用该-d
选项。或者只是使用print
内置函数来打印这些文件名;仅对从这些文件获取元数据信息ls
之类的选项有用。-l
ls -ld -- ^*.(md|c)
print -rC1 -- ^*.(md|c)(N)
这里的文件名是print
ed r
aw on 1
C
olumn。 N
glob 限定符 for 以NULL_GLOB
避免在找不到匹配文件时出现错误(并且无法从 中获取输出print
)。