为什么这个表达式不需要转义字符串?
"$(dirname "${0}")"
在我看来,表达式实际上应该是这样:
"$(dirname \"${0}\")"
但是,我相信上述版本中的第一个表达式在没有\“的情况下仍然可以使用。
那是为什么?
答案 0 :(得分:2)
根据man bash
:
Bash通过在子shell环境中执行命令并将命令替换替换为标准的输出来执行扩展。 命令,并删除所有尾随的换行符。
后来:
使用
$(command)
格式时,括号中的所有字符组成命令; 没有特殊待遇。
如果替换出现在双引号内,则不会对结果进行单词拆分和路径名扩展。
因此嵌入式引号不会在同一外壳中同时评估。
答案 1 :(得分:1)
$(...)
启动新的引用上下文。命令替换
$(dirname "${0}")
首先评估。产生的输出(而不是命令本身)由外部引号引起来。
(我不是完全 不确定如何处理"$(dirname \"${0}\")"
。似乎在解析命令之前会发生某种形式的引号删除。)