Linux Bash:变量到另一个变量

Kyl*_*ith 2 linux bash sed echo variable

我有这个:

echo $MSG | sed -e $'s/;/\\\n/g'
Run Code Online (Sandbox Code Playgroud)

我想将该 sed 的结果放在一个名为 $MSG2 的新变量中

就像是:

$MSG2=echo $MSG|sed -e $'s/;/\\\n/g'
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

谢谢!

Joh*_*024 5

对于您的任务,您不需要管道或 sed。使用bash像这样的内置命令可以更有效地完成所有操作:

NewMsg=${MSG//;/$'\n'}
Run Code Online (Sandbox Code Playgroud)

${MSG//;/$'\n'}模式替换的一个例子。它用;换行符替换每次出现的。结果保存在 shell 变量中NewMsg

举个例子:

$ Msg='1;2;3'
$ NewMsg=${Msg//;/$'\n'}
$ echo "$NewMsg"
1
2
3
Run Code Online (Sandbox Code Playgroud)

笔记:

  1. 最佳做法是使用小写或混合大小写的 shell 变量。系统对其变量使用所有大写字母,您不希望意外覆盖其中之一。

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

  3. 此外,除非您知道要回显的字符串中将包含哪些字符,否则会echo出现问题并且使用printf '%s\n' "$MSG". 有关更多详细信息,请参阅 Stéphane Chazelasechovsprintf非常有用的讨论

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