bash - 如何在双引号内转义双引号内的双引号?
问题描述
我尝试执行以下命令:
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
。
你能帮我解决吗?最好是给我一个嵌套引号的规则。
解决方案
在这种特殊情况下,您可以使用单引号代替内部(当前已转义)双引号,因为双引号内的单引号根本不特殊。
su -l user1 -c "hive -e 'ALTER TABLE schema1.table1 DROP IF EXISTS PARTITION (att1=\"$val\");'"
在一般情况下,您不能总是通过反斜杠转义来避免死亡。一般的报价规则非常简单;单引号之间的文本逐字引用,而双引号较弱,但允许您反斜杠不应被 shell 触及的内容。
推荐阅读
- git - git clone 获取在特定标签后添加/修改的文件
- c# - 尝试构建具有多个 where 条件的 linq 查询
- linux - perf 报告显示带有未解析内核符号的调用图
- rust - 为什么我的 Rust 程序总是进入 while 循环而从不退出
- javascript - 我想问一下 JS 中的 eventlistener 和 dom
- javascript - 在定义它的函数调用之外调用函数
- python - 从 2 个列表创建字典
- three.js - 如何使用@react-three/cannon 阻止相机通过 gltf 模型?
- java - 错误:不兼容的类型:字符串无法转换为 JSONObject url,(String) null,^
- python - 为什么我会丢失循环中的所有输出值,除了最后一个?