如何在 bash 脚本中将换行符添加到变量中

如何在 bash 脚本中将换行符添加到变量中

当我做

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
===========

回声命令必须使用双引号

相关内容