我的 zsh 正在替换 !~
使用我之前运行的命令。这是一个问题,因为当我运行 awk '$1 !~ /abc/
时,它取代了 !~
与命令。
关于如何禁用它的任何想法?这可能不是 zsh 的错,但在谷歌搜索了一个小时并没有找到任何东西后,我认为它是最有可能的候选者。
更新:
这只发生在 !~
时发生在换行符上:
echo !~
# ~/bin/test_translate.rb
echo foo | awk '
$1 !~ /abc/'
awk: cmd. line:2: $1 ~/bin/test_translate.rb /abc/
awk: cmd. line:2: ^ syntax error
awk: cmd. line:3: $1 ~/bin/test_translate.rb /abc/
awk: cmd. line:3: ^ unexpected newline or end of string
更新 2:
我已在
.zshrc
中将范围缩小到这一行:source $ZSH/oh-my-zsh.sh
我想知道是什么选项正在制作
zsh
替换 !~
在我访问的最后一条路径中加上空格键,但我不想停止使用 oh-my-zsh。我没有手动修改过$ZSH/oh-my-zsh.sh
.
最佳答案
在 zsh(和其他一些 shell)中 !
触发历史扩展(参见 man zshexpn
部分“历史扩展”)。在!~
的情况下zsh 将查找以 ~
开头的最新命令.
如果您不以任何方式使用历史扩展,您可以通过将其添加到您的 .zshrc
来禁用它。
setopt nobanghist
通常历史扩展不会在单引号字符串中完成,因此它不应以任何方式影响您的 awk 命令:
$ echo !~
~/docs
$ echo foo | awk '
$1 !~ /abc/'
foo
另一方面,内部双引号历史扩展已完成,您会收到提到的错误消息:
$ echo !~
~/docs
$ echo foo | awk "
$1 !~ /abc/"
echo foo | awk "
$1 ~/docs /abc/"
awk: cmd. line:2: ~/docs /abc/
awk: cmd. line:2: ^ syntax error
awk: cmd. line:3: ~/docs /abc/
awk: cmd. line:3: ^ unexpected newline or end of string
所以,如果问题可以追溯到
source $ZSH/oh-my-zsh.sh
,我猜哦,我的 ZSH 做了一些事情来打破 zsh 处理引用的方式。
关于zsh - 如何禁用 zsh 特殊变量(bang tilde !~)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17575251/