当使用 [!set] zsh 调用历史扩展时

当使用 [!set] zsh 调用历史扩展时

当我搜索文件时

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

相关内容