Linux Bash:变量到另一个变量

Linux Bash:变量到另一个变量

我有这个:

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

笔记:

  1. 最佳实践是使用小写或混合大小写的 shell 变量。系统对其变量使用全部大写字母,您不想意外覆盖其中之一。

  2. 除非你明确想要分词路径名扩展始终将 shell 变量放在双引号中。因此,当想要使用 时echo $MSG,请改用echo "$MSG"

  3. 另外,除非您知道要回显的字符串中将包含哪些字符,否则echo会出现问题,并且使用起来更安全、更便携printf '%s\n' "$MSG"。有关更多详细信息,请参阅 Stéphane Chazelas 的echoVS的内容非常丰富的讨论printf

  4. 请注意,如果您确实使用命令替换 ,$(...)shell 将删除所有尾随换行符。虽然这通常很有帮助,但有时这种更改是不必要的。

答案2

只需将其分配给变量,如下所示:

MSG2=$(echo $MSG | sed -e $'s/;/\\n/g')

相关内容