Ame*_*ina 20 zsh shell-script wildcards
假设我有以下文件:
Run Code Online (Sandbox Code Playgroud)|-- bar `-- foo |-- type_A_1 |-- type_A_2 |-- type_B_1 |-- type_B_2 |-- type_B_xx |-- type_B_xx `-- something_else
我认为以下命令
print -l foo/*~{type_B*}
Run Code Online (Sandbox Code Playgroud)
将打印一切下foo
,除了东西下手type_B
,但它并没有,而是在富打印的一切:
foo/type_A_1
foo/type_A_2
foo/type_B_1
foo/type_B_2
foo/type_B_xx
foo/something_else
Run Code Online (Sandbox Code Playgroud)
我也尝试过print -l foo/*~type_B
并得到了同样的东西。
异常通配符~
在 zsh 中如何工作?
Chr*_*sen 38
^
当 EXTENDED_GLOB 打开时,zsh具有glob 运算符。它似乎非常适合您所述的情况:
setopt extendedglob
print -rl foo/^type_A*
Run Code Online (Sandbox Code Playgroud)
它的意思是“匹配任何东西,除了匹配下面的模式”,但它的影响仅限于斜线之间的模式部分,或者模式的开头和第一个斜线之间,或者(在这种情况下)最后一个斜线之间斜线和模式的结尾。
您可以查看当前启用的zsh选项:
setopt
Run Code Online (Sandbox Code Playgroud)
并禁用 EXTENDED_GLOB :
unsetopt extendedglob
Run Code Online (Sandbox Code Playgroud)
jof*_*fel 12
您需要将该目录包含在异常中:print -l foo/*~foo/type_A*
或print -l foo/*~{foo/type_A*}
.
如果需要,您可以用通配符替换目录:
print -l foo/*~*/type_A*