我有这个:
echo $MSG | sed -e $'s/;/\\\n/g'
我想将 sed 的结果放入一个名为 $MSG2 的新变量中
就像是:
$MSG2=echo $MSG|sed -e $'s/;/\\\n/g'
我该怎么做?
谢谢你!
答案1
对于您的任务,您不需要管道或 sed。使用内置命令可以更有效地完成这一切bash
,如下所示:
NewMsg=${MSG//;/$'\n'}
${MSG//;/$'\n'}
是一个例子模式替换。它将每次出现的 替换;
为换行符。结果保存在 shell 变量中NewMsg
。
举个例子:
$ Msg='1;2;3'
$ NewMsg=${Msg//;/$'\n'}
$ echo "$NewMsg"
1
2
3
笔记:
最佳实践是使用小写或混合大小写的 shell 变量。系统对其变量使用全部大写字母,您不想意外覆盖其中之一。
除非你明确想要分词和路径名扩展始终将 shell 变量放在双引号中。因此,当想要使用 时
echo $MSG
,请改用echo "$MSG"
。另外,除非您知道要回显的字符串中将包含哪些字符,否则
echo
会出现问题,并且使用起来更安全、更便携printf '%s\n' "$MSG"
。有关更多详细信息,请参阅 Stéphane Chazelas 的echo
VS的内容非常丰富的讨论printf
。请注意,如果您确实使用命令替换 ,
$(...)
shell 将删除所有尾随换行符。虽然这通常很有帮助,但有时这种更改是不必要的。
答案2
只需将其分配给变量,如下所示:
MSG2=$(echo $MSG | sed -e $'s/;/\\n/g')