zsh - 如何禁用 zsh 特殊变量(bang tilde !~)?

标签 zsh

我的 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/

相关文章:

text - 如何使 zsh 单词导航/删除像 Vim 一样工作

font-awesome - 为什么我的终端外壳上没有呈现或替换 Font Awesome 字符?

arrays - zsh:检查字符串是否在数组中

powershell - wsl 中 zsh 的颜色问题

zsh - 如何在 ZSH 中编辑路径变量

linux - 如何使日期命令与自定义指定日期相关?

macos - zsh:权限被拒绝:gam

autocomplete - 如何在 oh-my-zsh 下强制完成文件名?

macos - 安装 prezto 时遇到问题

zsh - 更改 zsh 历史记录颜色