当我做
str="Hello World\n===========\n"
我\n
也打印出来了那我怎样才能有换行符呢?
答案1
您bash
可以使用语法
str=$'Hello World\n===========\n'
前面带有 a 的单引号$
是一种新语法,允许在字符串中插入转义序列。
还printf
内置允许将结果输出保存到变量中
printf -v str 'Hello World\n===========\n'
两种解决方案都不需要子 shell。
如果在下面需要打印字符串,则应该使用双引号,如下例所示:
echo "$str"
因为当您打印不带引号的字符串时,换行符将转换为空格。
答案2
您可以将文字换行符放在单引号内(在任何 Bourne/POSIX 风格的 shell 中)。
str='Hello World
===========
'
对于多行字符串,这里的文件经常很方便。该字符串作为命令的输入。
mycommand <<'EOF'
Hello World
===========
EOF
如果要将字符串存储在变量中,请cat
在命令替换中使用该命令。字符串末尾的换行符将被命令替换删除。如果您想保留最后的换行符,请在末尾放一个塞子,然后将其剥掉。在 POSIX 兼容的 shell 中,您可以str=$(cat <<'EOF'); str=${str%a}
在后面加上heredoc,但 bash 要求heredoc 出现在右括号之前。
str=$(cat <<'EOF'
Hello World
===========
a
EOF
); str=${str%a}
在 ksh、bash 和 zsh 中,您可以使用$'…'
引用形式来扩展引号内的反斜杠转义符。
str=$'Hello World\n===========\n'
答案3
如果您的脚本中多次需要换行符,您可以声明一个保存换行符的全局变量。这样您就可以在双引号字符串(变量扩展)中使用它。
NL=$'\n'
str="Hello World${NL} and here is a variable $PATH ===========${NL}"
答案4
从所有讨论中,这对我来说是最简单的方法:
bash$ str="Hello World
==========="
bash$ echo "$str"
Hello World
===========
这回声命令必须使用双引号。