我有一个字符串,我正在尝试将空格替换为换行符
我原来的字符串
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)
它不起作用...
有谁知道为什么?
问题在于:
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}