【问题标题】:Exclamation mark inside double quotes results in a strange parse error [duplicate]双引号内的感叹号导致奇怪的解析错误[重复]
【发布时间】:2012-10-15 00:33:00
【问题描述】:

为什么这个命令行可以工作:

$ output='Irrelevant'; if [[ $output =~ Something ]]; then echo "I found something in the output." ; fi

这个给我一个奇怪的解析错误?

$ output='Irrelevant'; if [[ $output =~ Something ]]; then echo "I found something in the output!" ; fi
-bash: !": event not found

与第一个版本的唯一变化是要在引号内回显的句子以感叹号结尾。 为什么 Bash 在第二个版本中给我这个错误?

如果重要的话,这是bash --version 的输出:

GNU bash, version 4.2.24(1)-release (x86_64-pc-linux-gnu)

【问题讨论】:

标签: bash quotes


【解决方案1】:

您可以将字符串用单引号而不是双引号括起来。

感叹号调用bash manual中描述的非常有用的历史扩展功能。

历史扩展由历史扩展字符的出现引入,默认为!。只有\' 可以用来转义历史扩展字符。

例如,要执行以单词 mysql 开头的最后一个命令,请键入:

!mysql

或要执行包含单词grep 的最后一条命令,请输入:

!?grep

bash 手册还记录了history expansion operators 的语法。

【讨论】:

  • 我其实知道历史扩展。但没有连接点。谢谢!
猜你喜欢
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-29
  • 2012-07-07
  • 1970-01-01
  • 2023-03-19
  • 2013-06-22
相关资源
最近更新 更多