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
我正在尝试查找 $
后面没有跟 !
的实例。
那应该需要$
,转义,也就是\$
和[^!]
转义,应该是[^\!]
,除非[
和]
也需要转义?不确定这个 - 对 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