当我编写bash脚本时,我发现下面的语句有效并按预期工作:
#!/bin/bash
fn="file name"
LF='
'
fnc="$LF$(cat "$fn")"
echo "$fnc"
但是在fnc="$LF$(cat "$fn")"
中有一对无人值守的嵌套引号。这是一种特性还是运气?
这是所有POSIX shell都具有的特性,在标准中简要描述如下。
引号内的输入字符,也包括在
$(
和匹配的)
之间,不受双引号[.]的影响
这意味着,在这个特殊的情况下,如果您在命令替换中取消引用"$fn"
,它将不顾一切地进行分词,并且cat
将接收两个参数(file
和name
)而不是一个参数(file name
)。$(cat $fn)
是否在双引号之间不影响$fn
的展开。