gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:50:45 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com