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