This
STR="Hello\nWorld"
echo $STR
作为输出产生
Hello\nWorld
而不是
Hello
World
我应该做什么有一个换行在字符串?
注意:此问题与echo无关。 我知道echo -e,但我正在寻找一种解决方案,允许传递一个字符串(其中包括换行符)作为参数到其他命令,没有类似的选项来解释\n的换行符。
This
STR="Hello\nWorld"
echo $STR
作为输出产生
Hello\nWorld
而不是
Hello
World
我应该做什么有一个换行在字符串?
注意:此问题与echo无关。 我知道echo -e,但我正在寻找一种解决方案,允许传递一个字符串(其中包括换行符)作为参数到其他命令,没有类似的选项来解释\n的换行符。
当前回答
在我的系统(Ubuntu 17.10)上,你的例子就像预期的那样工作,无论是从命令行输入(到sh)还是作为sh脚本执行:
[bash]§ sh
$ STR="Hello\nWorld"
$ echo $STR
Hello
World
$ exit
[bash]§ echo "STR=\"Hello\nWorld\"
> echo \$STR" > test-str.sh
[bash]§ cat test-str.sh
STR="Hello\nWorld"
echo $STR
[bash]§ sh test-str.sh
Hello
World
我想这回答了你的问题:它就是有效。(我没有试图弄清楚诸如在sh中换行符替换\n的具体时间)。
然而,我注意到这个脚本在使用bash执行时会表现不同,而是会打印出Hello\nWorld:
[bash]§ bash test-str.sh
Hello\nWorld
我已经设法获得所需的输出与bash如下:
[bash]§ STR="Hello
> World"
[bash]§ echo "$STR"
注意$STR周围的双引号。如果保存并作为bash脚本运行,则行为相同。
下面也给出了期望的输出:
[bash]§ echo "Hello
> World"
其他回答
在单引号'…\n…,但是双引号不能用。
$ echo $'Hello\nWorld'
Hello
World
$ echo $"Hello\nWorld"
Hello\nWorld
我发现-e标志优雅而直接
bash$ STR="Hello\nWorld"
bash$ echo -e $STR
Hello
World
如果字符串是另一个命令的输出,我只使用引号
indexes_diff=$(git diff index.yaml)
echo "$indexes_diff"
我根据其他答案所做的是
NEWLINE=$'\n'
my_var="__between eggs and bacon__"
echo "spam${NEWLINE}eggs${my_var}bacon${NEWLINE}knight"
# which outputs:
spam
eggs__between eggs and bacon__bacon
knight
在我的系统(Ubuntu 17.10)上,你的例子就像预期的那样工作,无论是从命令行输入(到sh)还是作为sh脚本执行:
[bash]§ sh
$ STR="Hello\nWorld"
$ echo $STR
Hello
World
$ exit
[bash]§ echo "STR=\"Hello\nWorld\"
> echo \$STR" > test-str.sh
[bash]§ cat test-str.sh
STR="Hello\nWorld"
echo $STR
[bash]§ sh test-str.sh
Hello
World
我想这回答了你的问题:它就是有效。(我没有试图弄清楚诸如在sh中换行符替换\n的具体时间)。
然而,我注意到这个脚本在使用bash执行时会表现不同,而是会打印出Hello\nWorld:
[bash]§ bash test-str.sh
Hello\nWorld
我已经设法获得所需的输出与bash如下:
[bash]§ STR="Hello
> World"
[bash]§ echo "$STR"
注意$STR周围的双引号。如果保存并作为bash脚本运行,则行为相同。
下面也给出了期望的输出:
[bash]§ echo "Hello
> World"
Echo是90年代的,而且充满了危险,使用它应该会导致内核转储不少于4GB。严肃地说,echo的问题是Unix标准化进程最终发明printf实用程序的原因,它解决了所有问题。
要在字符串中获取换行符,有两种方法:
# 1) Literal newline in an assignment.
FOO="hello
world"
# 2) Command substitution.
BAR=$(printf "hello\nworld\n") # Alternative; note: final newline is deleted
printf '<%s>\n' "$FOO"
printf '<%s>\n' "$BAR"
在那里!没有SYSV和BSD的回声疯狂,所有东西都被整齐地打印出来,并完全支持C转义序列。请大家现在就使用printf来满足所有的输出需求,不要回头。