当我搜索文件时
ls [a-t]est.txt
test.txt
它给出了预期的结果
但是,当我使用
ls [!a-g]est.txt
输出是ls [aptg]est.txt
[!set] 的其他一些示例:
ls [!b-z]est.txt
回报[bbz]est.txt
ls [!g-h]est.txt
回报ls [git clone --depth=1h]est.txt
我的 zsh 是否有问题,或者 [!set] 在 zsh 中的工作方式不同?
机器是Linux Mint 18.2
答案1
正如 Steeldriver 所建议的,^
代替!
make [!set] 可以解决该问题。
原因是 zsh 中!
触发了历史扩展。如果您不希望发生这种情况,请禁用历史记录扩展。为此,请setopt nobanghist
在命令行中执行。
答案2
避免历史扩展的一种方法是引用!
反斜杠:
ls [\!a-g]est.txt
^
当然,当否定一个集合时,使用代替可能更容易!
。
!"
另一种方法是通过在(以前的)第一个之前的任何位置(真的!)添加字符序列来暂时禁用历史扩展!
。!"
将被删除,任何后续内容都!
没有特殊含义。
!" ls [!a-g]est.txt
ls !" [!a-g]est.txt
ls [!"!a-g]est.txt
l!"s [!a-g]est.txt