使用ANSI-C 引用:
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部分),如下所示:
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
使用and是一个有趣的把戏"$*"
。