使用ANSI-C quoting:
var="$var"$'\n'"in a box"
您可以将$'\n' 放入变量中:
newline=$'\n'
var="$var${newline}in a box"
顺便说一句,在这种情况下,最好使用连接运算符:
var+="${newline}in a box"
如果您不喜欢 ANSI-C 引用,可以使用 printf 及其 -v 选项:
printf -v var '%s\n%s' "$var" "in a box"
然后,要打印变量var 的内容,不要忘记引号!
echo "$var"
或者,更好的是,
printf '%s\n' "$var"
备注。 不要在 Bash 中使用大写的变量名。太可怕了,总有一天它会和一个已经存在的变量发生冲突!
您还可以使用间接扩展创建一个函数来将换行符和字符串附加到变量(查看Shell Parameter Expansion section of the manual),如下所示:
append_with_newline() { printf -v "$1" '%s\n%s' "${!1}" "$2"; }
然后:
$ var="The "
$ var+="cat wears a mask"
$ append_with_newline var "in a box"
$ printf '%s\n' "$var"
The cat wears a mask
in a box
$ # there's no cheating, look at the content of var:
$ declare -p var
declare -- var="The cat wears a mask
in a box"
只是为了好玩,这里是 append_with_newline 函数的通用版本,它接受 n+1 个参数 (n≥1) 并将它们全部连接起来(使用第一个例外是将要扩展的变量的名称)使用换行符作为分隔符,并将答案放入变量中,变量的名称在第一个参数中给出:
concatenate_with_newlines() { local IFS=$'\n'; printf -v "$1" '%s\n%s' "${!1}" "${*:2}"; }
看看效果如何:
$ var="hello"
$ concatenate_with_newlines var "a gorilla" "a banana" "and foobar"
$ printf '%s\n' "$var"
hello
a gorilla
a banana
and foobar
$ # :)
IFS 和 "$*" 是一个有趣的把戏。