根据文档,~ 可以在EXTENDED_GLOB设置时用作glob 运算符,允许像这样的构造
print -rl glob*~globA*~glob*B
Run Code Online (Sandbox Code Playgroud)
所以任何匹配glob*但不匹配globA*和的东西glob*B。
好的:
touch file{1,2,3,4{,5}}
setopt extendedglob
Run Code Online (Sandbox Code Playgroud)
现在
print -rl file*~f*3~file4*
Run Code Online (Sandbox Code Playgroud)
表现如预期:
file1
file2
Run Code Online (Sandbox Code Playgroud)
但是当使用空模式时
print -rl file*~f*3~~file4*
Run Code Online (Sandbox Code Playgroud)
印刷
file1
file2
file3
Run Code Online (Sandbox Code Playgroud)
看起来只有最后一个模式用于过滤第一个 glob 的结果(第二个和第三个 - 这是空的 - 被忽略)。
print -rl file*~f*3~file4*~~
Run Code Online (Sandbox Code Playgroud)
产生
file1
file2
file4
file45
Run Code Online (Sandbox Code Playgroud)
所以现在只使用第二个......
奇怪的是,如果第一个波浪号之后的模式是空的,它根本不起作用,例如
print -rl file*~~f*3~file4*
Run Code Online (Sandbox Code Playgroud)
错误与
zsh: no matches found: file*~~f*3~file4*
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
这与zsh 5.3.1是否重要...
~~不使用空模式。相反,它会做以下两件事之一:
~~”。~”,然后移动到下一个排除模式(即文字~后跟~运算符)。如果我们使用一些额外内容扩展您的文件集,我们可以看到这种情况发生:
touch file3~ file3~~ file4~ file4~~
Run Code Online (Sandbox Code Playgroud)
现在运行你的第一个奇怪的命令:
print -rl file*~f*3~~file4*
file1
file2
file3
file3~~
Run Code Online (Sandbox Code Playgroud)
file3~已被排除,所有三个file4*s 也是如此。file3~~仍然存在,因为它不匹配f*3~。
第二个:
print -rl file*~f*3~file4*~~
file1
file2
file3~
file3~~
file4
file45
file4~
Run Code Online (Sandbox Code Playgroud)
Onlyfile4~~已被排除,因为这是唯一一个匹配的file4*~~.
最后一个案例现在确实有输出:
print -rl file*~~f*3~file4*
file3~
file3~~
Run Code Online (Sandbox Code Playgroud)
因为那些是匹配的两个文件file*~,但不匹配f*3或file4*.
也许这可能是一个解析错误,至少对于文字然后运算符的情况,但我看不到空排除模式的用途,所以我不确定它应该做什么。
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |