【问题标题】:How to escape double quotes inside escaped doubles quotes inside double quotes?如何在双引号内转义双引号内的双引号?
【发布时间】:2025-12-11 05:15:01
【问题描述】:

我尝试执行以下命令:

su -l user1 -c "hive -e \"ALTER TABLE schema1.table1 DROP IF EXISTS PARTITION (att1=\"$val\");\""

我得到了错误:

FAILED: ParseException line 1:81 cannot recognize input near 'val1' ')' '<EOF>' in constant

所以这里的问题是由于第二级嵌套的双引号,其间有变量$val,其值为val1

你能帮我解决吗?最好是给我一个嵌套引号的规则。

【问题讨论】:

  • "hive -e \"ALTER TABLE schema1.table1 DROP IF EXISTS PARTITION (att1=\\\"val1\\\");\"" 怎么样?
  • 为什么不在外面用单引号呢?删除一级转义。
  • @kvantour 我已经进行了编辑。实际上我应该使用变量 $val 而不是直接使用字符串 val1。
  • variable substitution 不适合这种任务吗?

标签: bash escaping quotes double-quotes


【解决方案1】:

在这种特殊情况下,您可以使用单引号代替内部(当前已转义)双引号,因为双引号内的单引号一点也不特殊。

su -l user1 -c "hive -e 'ALTER TABLE schema1.table1 DROP IF EXISTS PARTITION (att1=\"$val\");'"

在一般情况下,您不能总是通过反斜杠转义来避免死亡。一般的报价规则非常简单;单引号之间的文本是逐字引用的,而双引号较弱,但允许您反斜杠不应被 shell 触及的内容。

【讨论】: