Bash 脚本中的嵌套双引号

lxv*_*xvs 1 bash shell

当我编写 bash 脚本时,我发现以下语句有效并且按预期工作:

#!/bin/bash
fn="file name"
LF='
'
fnc="$LF$(cat "$fn")"
echo "$fnc"
Run Code Online (Sandbox Code Playgroud)

但是fnc="$LF$(cat "$fn")". 这是功能还是运气?

ogu*_*ail 7

这是所有 POSIX shell 都具有的特性,在标准中简要描述如下。

引用字符串中的输入字符也包含在$(和之间,匹配)不应受双引号 [.] 的影响。

这意味着,在这种特殊情况下,如果您"$fn"在命令替换中取消cat引用,无论如何它将受到分词,并且将接收两个参数 ( fileand name) 而不是一个 ( file name)。是否$(cat $fn)在双引号之间不影响如何$fn展开。