我有一个字符串,我正在尝试将空格替换为换行符
我原来的字符串
xxx xxx xxx xxx
如果我使用以下命令,那么它可以正常工作
echo $string | sed 's/ /\n/g'
但是,如果我想将新字符串分配给另一个变量,例如
newString=`echo $string | sed 's/ /\n/g'`
echo $newString
它不起作用......
有谁知道为什么?
答案 0 :(得分:4)
问题在于:
echo $newString
表示“获取$newString
的值,执行单词拆分和文件名扩展,并将结果作为零个或多个参数传递给echo
”。分词$'xxx\nxxx\nxxx\nxxx'
的结果是四个单独的xxx
参数,因此您的命令等于echo xxx xxx xxx xxx
。
相反,你想要:
echo "$newString"
表示“取$newString
的值并将其作为单个参数传递给echo
”。
顺便提一下,如果您只是替换字符串中的字符,则无需使用sed
。 Bash支持这作为内置功能。而不是:
newString=`echo $string | sed 's/ /\n/g'`
你可以这样写:
newString="${string// /$'\n'}"
(一般模式为${variable_name//string_to_replace/replacement_string}
。