如何在 zsh 中使用独占通配符?
How to use exclusive wildcard in zsh?
我正在使用 Mac OS Big Sur 11.4,最近切换到 zsh,但在其中使用通配符时遇到了一些问题。假设我有一个包含文件的目录
1 2 3 1file 2file file1 file2 file3
并且我想列出不以数字开头的文件。在 bash 它工作正常如下
Steves-Mac:test hengyuan$ cd test/dir3/
Steves-Mac:dir3 hengyuan$ ls
1 1file 2 2file 3 file1 file2 file3
Steves-Mac:dir3 hengyuan$ ls [[:digit:]]*
1 1file 2 2file 3
Steves-Mac:dir3 hengyuan$ ls [![:digit:]]*
file1 file2 file3
但是,我在zsh中得到了如下结果
➜ dir3 ls
1 1file 2 2file 3 file1 file2 file3
➜ dir3 ls [[:digit:]]*
1 1file 2 2file 3
➜ dir3 ls [![:digit:]]*
zsh: event not found: [
为什么我会得到如此奇怪的结果以及如何解决这些问题?谢谢。
使用 zsh !
调用历史扩展。您可以使用 [^...]
,这与 [!...]
的含义相同。您还可以通过引用 [\!...]
或使用特殊序列 !"
来禁用历史扩展,这将完全禁用当前命令行的历史扩展。
所以这些都是等价的:
ls [^[:digit:]]*
ls [\![:digit:]]*
ls !" [![:digit:]]*
要完全禁用历史扩展,您可以 运行 setopt nobanghist
.
我正在使用 Mac OS Big Sur 11.4,最近切换到 zsh,但在其中使用通配符时遇到了一些问题。假设我有一个包含文件的目录
1 2 3 1file 2file file1 file2 file3
并且我想列出不以数字开头的文件。在 bash 它工作正常如下
Steves-Mac:test hengyuan$ cd test/dir3/
Steves-Mac:dir3 hengyuan$ ls
1 1file 2 2file 3 file1 file2 file3
Steves-Mac:dir3 hengyuan$ ls [[:digit:]]*
1 1file 2 2file 3
Steves-Mac:dir3 hengyuan$ ls [![:digit:]]*
file1 file2 file3
但是,我在zsh中得到了如下结果
➜ dir3 ls
1 1file 2 2file 3 file1 file2 file3
➜ dir3 ls [[:digit:]]*
1 1file 2 2file 3
➜ dir3 ls [![:digit:]]*
zsh: event not found: [
为什么我会得到如此奇怪的结果以及如何解决这些问题?谢谢。
使用 zsh !
调用历史扩展。您可以使用 [^...]
,这与 [!...]
的含义相同。您还可以通过引用 [\!...]
或使用特殊序列 !"
来禁用历史扩展,这将完全禁用当前命令行的历史扩展。
所以这些都是等价的:
ls [^[:digit:]]*
ls [\![:digit:]]*
ls !" [![:digit:]]*
要完全禁用历史扩展,您可以 运行 setopt nobanghist
.