编写bash脚本时双引号是否支持第三层级递归?正确语法是什么?
Bash 三层双引号嵌套语法指南
核心规则
双引号内部嵌套双引号时,每向内深入一层,转义双引号所需的反斜杠数量需要翻倍,保证每层解析时都能正确识别转义后的双引号。
- 两层嵌套(你当前的正确实现)
代码:"first level \"second level\""
解析结果:first level "second level" - 三层嵌套正确写法
代码:"first level \"second level \\\"third level\\\"\""
解析结果:first level "second level "third level""
常见场景补充说明
如果你是在命令替换($(command) 或反引号包裹的命令)内部使用三层双引号,反斜杠需要再额外增加一倍,也就是用7个反斜杠转义最内层双引号,因为命令替换会多执行一次转义解析。
易维护替代方案
嵌套层级较多时,建议分层定义变量存储各层字符串,避免大量转义符降低可读性,示例如下:
# 定义最内层字符串 third_level="third level" # 定义第二层字符串,直接引用内层变量 second_level="second level \"$third_level\"" # 定义最外层字符串,引用第二层变量 final="first level \"$second_level\""
内容的提问来源于stack exchange,提问作者martindale
相关产品推荐
相关产品推荐

