Bash 尝试 运行 银色搜索器时出现语法错误

Bash syntax errors when trying to run silver searcher

我正在尝试查找 $ 后面没有跟 ! 的实例。

那应该需要$,转义,也就是\$[^!]转义,应该是[^\!],除非[] 也需要转义?不确定这个 - 对 bash 的了解还不够。

ag "\$[^\!]"
bash: ^\!: syntax error: operand expected (error token is "^\!")

ag "\$[^!]"
bash: !]: event not found

ag "\$[^\!]"
bash: ^\!: syntax error: operand expected (error token is "^\!")

ag "\$[\^\!]"
bash: \^\!: syntax error: operand expected (error token is "\^\!")

ag "\$[\^\!]"
bash: \^\!: syntax error: operand expected (error token is "\^\!")

这些没有结果:

ag "\$\[\^\!\]"
ag "\$\[\^\!\]"
ag "\$\[\^\!\]"
ag "\$\[\^\!\]"
ag "$\[\^\!\]"
ag "\$\[\^\!\]"

如有疑问,请使用单引号 -- 和字符 类.

ag '[$][^!]'
  • 单引号防止 ! 被视为历史扩展字符(bash 的指令,用 shell 历史中的命令替换命令)。
  • 单引号防止反斜杠被解释为转义序列的一部分,确保它们按字面意思传递。
  • [$]$ 更清晰:如果我们 在不同类型的引用上下文中,则 \ 可能会被消耗掉在那种情况下;方括号更不容易被误解。 (如果有一个名为 $ 的文件,并且我们处于完全未引用的上下文中,则可以将其视为 glob 表达式......但这比与反斜杠案例相关的问题要小得多)。

此外,鉴于您的目标不是与 1970 年代和 1980 年代的 shell 兼容,请考虑将以下内容放入您的 ~/.bashrc 中以制作 ! 字符不再特殊(仅在交互式 shell 中,使它们的行为偏离脚本):

set +H