我正试图找到$没有遵循的实例!.
这应该必要$,躲过,这是\\$和[^!]逃脱这应该是[^\\!]除非[和]需要转义呢?对这一点不确定 - 对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 "\^\!")
Run Code Online (Sandbox Code Playgroud)
这些没有结果:
ag "\\$\\[\\^\\!\\]"
ag "\\$\\[\\^\\!\\]"
ag "\\$\[\\^\\!\]"
ag "\\$\[\^\!\]"
ag "\$\[\^\!\]"
ag "\\$\[\^\!\]"
Run Code Online (Sandbox Code Playgroud)
如有疑问,请使用单引号和字符类.
ag '[$][^!]'
Run Code Online (Sandbox Code Playgroud)
!被视为历史扩展字符(bash用shell历史记录替换命令的指令).[$] 比以前更清楚\$:如果我们处于不同类型的引用上下文中,则可能被该上下文消耗; 方括号不太容易被误解.(如果有一个名为的文件,并且我们处于一个完全没有引用的上下文中,它可以被视为一个glob表达式......但这是一个比反斜杠情况更小的关注点).\$另外,考虑到你的目标不是手指与20世纪70年代和80年代的炮弹兼容,考虑在你~/.bashrc的!角色中加入以下角色以使角色不再特殊(仅在交互式炮弹中,使他们的行为偏离剧本):
set +H
Run Code Online (Sandbox Code Playgroud)