递归引用
Recursive Quotation
写bash脚本时,双引号有没有三级递归?
我需要使用双引号,因为单引号会按字面意义读取变量。
我可以
"first level \"second level\""
但是想做一些类似的事情
"first level \"second level \" third level \"\""
我知道为什么这不起作用,但我需要语法方面的帮助
你也必须转义反斜杠。
"first level \"second level \\" third level \\"\""
第一个 \
生成文字反斜杠,然后 \"
转义双引号。
使用 Here-Documents 降低复杂性
请不要这样做。相反,如果您需要额外的引用级别,请考虑:
- 正确混合单引号和双引号,最大限度地减少您需要进行的转义操作。
- 使用此处文档,避免整个混乱。
我将同时介绍两者,但更多地关注第二点,因为它更简单且不易出错。例如:
cat <<-'EOF'
first level "second level 'third level'"
EOF
将完全避免插值,并正确打印:
first level "second level 'third level'"
如果您正在做比这更复杂的事情,您可能需要考虑重构代码中的其他地方以简化事情。有时复杂性是不可避免的,但如果您对问题采取不同的方法,几乎总能找到更简单的解决方案。
写bash脚本时,双引号有没有三级递归? 我需要使用双引号,因为单引号会按字面意义读取变量。
我可以
"first level \"second level\""
但是想做一些类似的事情
"first level \"second level \" third level \"\""
我知道为什么这不起作用,但我需要语法方面的帮助
你也必须转义反斜杠。
"first level \"second level \\" third level \\"\""
第一个 \
生成文字反斜杠,然后 \"
转义双引号。
使用 Here-Documents 降低复杂性
请不要这样做。相反,如果您需要额外的引用级别,请考虑:
- 正确混合单引号和双引号,最大限度地减少您需要进行的转义操作。
- 使用此处文档,避免整个混乱。
我将同时介绍两者,但更多地关注第二点,因为它更简单且不易出错。例如:
cat <<-'EOF'
first level "second level 'third level'"
EOF
将完全避免插值,并正确打印:
first level "second level 'third level'"
如果您正在做比这更复杂的事情,您可能需要考虑重构代码中的其他地方以简化事情。有时复杂性是不可避免的,但如果您对问题采取不同的方法,几乎总能找到更简单的解决方案。