递归引用

Recursive Quotation

写bash脚本时,双引号有没有三级递归? 我需要使用双引号,因为单引号会按字面意义读取变量。

我可以

"first level \"second level\""

但是想做一些类似的事情

"first level \"second level \" third level \"\""

我知道为什么这不起作用,但我需要语法方面的帮助

你也必须转义反斜杠。

"first level \"second level \\" third level \\"\""

第一个 \ 生成文字反斜杠,然后 \" 转义双引号。

使用 Here-Documents 降低复杂性

请不要这样做。相反,如果您需要额外的引用级别,请考虑:

  1. 正确混合单引号和双引号,最大限度地减少您需要进行的转义操作。
  2. 使用此处文档,避免整个混乱。

我将同时介绍两者,但更多地关注第二点,因为它更简单且不易出错。例如:

cat <<-'EOF'
first level "second level 'third level'"
EOF

将完全避免插值,并正确打印:

first level "second level 'third level'"

如果您正在做比这更复杂的事情,您可能需要考虑重构代码中的其他地方以简化事情。有时复杂性是不可避免的,但如果您对问题采取不同的方法,几乎​​总能找到更简单的解决方案。