Regex 尝试运行silver searcher时出现Bash语法错误

Regex 尝试运行silver searcher时出现Bash语法错误,regex,bash,ag,Regex,Bash,Ag,我正在尝试查找$的实例,这些实例后面没有 这应该需要$,转义,这是\\$和[^!]转义,这应该是[^\\!],除非[和]也需要转义?不确定这一点-还不太了解bash ag "\\$[^\!]" bash: ^\!: syntax error: operand expected (error token is "^\!") ag "\\$[^!]" bash: !]: event not found ag "\\$[^\\!]" bash: ^\\!: syntax error: operan

我正在尝试查找
$
的实例,这些实例后面没有

这应该需要
$
,转义,这是
\\$
[^!]
转义,这应该是
[^\\!]
,除非
[
]
也需要转义?不确定这一点-还不太了解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表达式……但这是一组比反斜杠情况下相关的小得多的关注点)

此外,鉴于20世纪70年代和80年代的目标不是与外壳兼容,请考虑在<<代码> ~/.BasHrc>代码>中使用以下代码来生成<代码> <代码>角色不再特殊(仅在交互式shell中,使其行为偏离脚本):


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

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

此外,鉴于20世纪70年代和80年代的目标不是与外壳兼容,请考虑在<<代码> ~/.BasHrc>代码>中使用以下代码来生成<代码> <代码>角色不再特殊(仅在交互式shell中,使其行为偏离脚本):


我觉得自己像个老古董,我还是用
用于历史参考,即使我可以使用交互式编辑。感谢这对我来说非常有效。我对bash和regexI都有了更多的了解。我觉得自己像个老古董,我仍然使用
用于历史参考,即使我可以使用交互式编辑。感谢这对我来说非常有效。我已经了解了更多有关bash和regex的信息