我几乎可以肯定我以前在这里工作过的代码。这是一个简化版本及其产生的内容:
a="atext"
b="btext"
var=$'${a}\n${b}\n'
printf "var=$var"
产生输出:
var=${a}
${b}
真实代码输出var到文件,但变量扩展由于某种原因没有发生。
如果这不起作用,你能否提出一个不错的替代方法,以及为什么要使用$' &#39 ;?感谢。
GNU bash,版本4.3.42
答案 0 :(得分:3)
$''
是一种引用类型,用于允许反斜杠转义序列描述具有不可打印字符和其他此类奇怪的文字字符串。因此,$'\n'
评估单个字符 - 换行符 - 而'\n'
和"\n"
评估为两个字符,第一个是反斜杠,第二个是{{1} }。
如果您希望获得原始代码的确切行为 - 在两个不同扩展的结果之间添加文字换行符 - 您可以在字符串中途切换引号类型:
n
也就是说,彼此相邻,之间没有空格:
a="atext"
b="btext"
var="$a"$'\n'"$b"
printf '%s' "var=$var"
这会让您展开"$a"
$'\n'
"$b"
和$a
,并在它们之间添加文字换行符。
为什么这很重要?请尝试以下方法:
$b
答案 1 :(得分:0)
只需用双引号替换单引号。
$ cat test
a="atext"
b="btext"
var=$"${a}\n${b}\n"
printf "var=$var"
$ sh test
var=atext
btext
对于变量扩展,您需要使用双引号或无引号。单引号否定扩展。