Linux 将空格替换为字符串的换行符

use*_*504 2 linux bash

我有一个字符串,我正在尝试将空格替换为换行符

我原来的字符串

xxx xxx xxx xxx
Run Code Online (Sandbox Code Playgroud)

如果我使用以下命令,则它可以工作

echo $string | sed 's/ /\n/g'
Run Code Online (Sandbox Code Playgroud)

但是,如果我想将新字符串分配给另一个变量,例如

newString=`echo $string | sed 's/ /\n/g'`
echo $newString
Run Code Online (Sandbox Code Playgroud)

它不起作用...

有谁知道为什么?

rua*_*akh 5

问题在于:

echo $newString
Run Code Online (Sandbox Code Playgroud)

表示“取 的值$newString,执行分词和文件名扩展,并将结果作为零个或多个参数传递给echo”。分词的结果$'xxx\nxxx\nxxx\nxxx'是四个单独的xxx参数,因此您的命令等于echo xxx xxx xxx xxx.

相反,您想要:

echo "$newString"
Run Code Online (Sandbox Code Playgroud)

这意味着“取值$newString并将其作为单个参数传递给echo”。


顺便说一句,如果您只是替换字符串中的字符,则不需要使用sed. Bash 支持将此作为内置功能。取而代之的是:

newString=`echo $string | sed 's/ /\n/g'`
Run Code Online (Sandbox Code Playgroud)

你可以这样写:

newString="${string// /$'\n'}"
Run Code Online (Sandbox Code Playgroud)

(一般模式是.${variable_name//string_to_replace/replacement_string}