问题描述
这个
STR="Hello\nWorld"
echo $STR
作为输出产生
Hello\nWorld
代替
Hello
World
如何在字符串中添加换行符?
What should I do to have a newline in a string?
注意:这个问题与 echo 无关.我知道 echo -e
,但我正在寻找一种解决方案,允许将字符串(包括换行符)作为参数传递给 other 命令没有类似的选项将 \n
解释为换行符.
Note: This question is not about echo.I'm aware of echo -e
, but I'm looking for a solution that allows passing a string (which includes a newline) as an argument to other commands that do not have a similar option to interpret \n
's as newlines.
推荐答案
如果你使用 Bash,解决方案是使用 $'string'
,例如:
If you're using Bash, the solution is to use $'string'
, for example:
$ STR=$'Hello\nWorld'
$ echo "$STR" # quotes are required here!
Hello
World
如果您几乎使用任何其他 shell,只需在字符串中按原样插入换行符:
If you're using pretty much any other shell, just insert the newline as-is in the string:
$ STR='Hello
> World'
Bash 很不错.它不仅仅接受 $''
字符串中的 \n
.以下是 Bash 手册页的摘录:
Bash is pretty nice. It accepts more than just \n
in the $''
string. Here is an excerpt from the Bash manual page:
Words of the form $'string' are treated specially. The word expands to
string, with backslash-escaped characters replaced as specified by the
ANSI C standard. Backslash escape sequences, if present, are decoded
as follows:
\a alert (bell)
\b backspace
\e
\E an escape character
\f form feed
\n new line
\r carriage return
\t horizontal tab
\v vertical tab
\\ backslash
\' single quote
\" double quote
\nnn the eight-bit character whose value is the octal value
nnn (one to three digits)
\xHH the eight-bit character whose value is the hexadecimal
value HH (one or two hex digits)
\cx a control-x character
The expanded result is single-quoted, as if the dollar sign had not
been present.
A double-quoted string preceded by a dollar sign ($"string") will cause
the string to be translated according to the current locale. If the
current locale is C or POSIX, the dollar sign is ignored. If the
string is translated and replaced, the replacement is double-quoted.
这篇关于如何在 sh 的字符串中添加换行符?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!