将命令输出存储到变量时保留换行符


Linux 中,命令替换允许用户将命令的输出用作其他命令的参数。在这里,您可以替换所有可以写入标准输出的命令。此外,您可以使用命令替换来创建 shell 脚本并将命令的输出保存为变量。

一些输出包含多行,因此当您执行命令替换时,输出可能不会以相同的模式显示。当您不使用正确的 shell 变量时,输出将显示在一行中,即不保留换行符。在本教程中,我们将了解如何通过以下方法在将命令输出存储到变量时保留换行符:here-string、双引号和 shell 脚本。

将命令输出存储到变量时保留换行符

在这里,我们将使用命令替换将文件的输出分配给 shell 变量。例如,我们有一个“Linux.txt”文件,但首先让我们检查 cat 命令以查看此文件的内容

:~$ cat Linux.txt
Some popular Linux Distros are:
Ubuntu
Centos
Arch Linux
Rocky Linux
Alpine Linux

您可以看到上述文件的输出有多个换行符。现在,我们将使用命令替换来分配上面获得的输出。

在 shell 中替换变量后,使用以下 echo 命令查看 var 变量的输出。

:~$ var=$(cat Linux.txt) 
:~$ echo $var 
Some popular Linux Distros are: Ubuntu Centos Arch Linux Rocky Linux Alpine Linux

您可以看到,它没有将输出显示在单独的行上,而是将它们放在一起显示。为了在将输出存储到变量时保留换行符,我们必须以稍微不同的方式使用这些 shell 变量。它还有一些不同的方法,如下所示

双引号

您可以通过将变量括在双引号中来保留输出中的换行符。

:~$ echo "$var"
Some popular Linux Distros are:
Ubuntu
Centos
Arch Linux
Rocky Linux
Alpine Linux

因此,在双引号中引用变量是保留换行符的最佳方法。

如果您添加单引号而不是双引号,系统会将变量视为单个参数并打印相同的内容。因此,在引用 shell 变量时,应始终使用双引号。

Here-String

Here-string 用于从变量或路径重定向输入。此方法在将命令输出快速存储到变量时非常受欢迎。您必须在 here-string 中使用“<<<”运算符将字符串重定向到命令。在命令替换之后,您按如下方式使用 here-sting

command <<<$[variable]

例如,我们将使用上面的示例并通过 here-string 存储换行符。

:~$ cat <<<$var
Some popular Linux Distros are:
Ubuntu
Centos
Arch Linux
Rocky Linux
Alpine Linux

Shell 脚本

您还可以打印输出,在存储命令时保持换行符,方法是创建 shell 脚本。在这里,我们将使用 for 循环和 IFS shell 变量(内部字段分隔符)的概念来创建此 shell 脚本。

为此,我们将文件名作为命令行参数传递,并且使用该文件名,脚本应该能够打印文件的内容并保留换行符。

在下面的 shell 脚本中,我们使用文件名创建一个变量,并将其分配给'${1}.'的值。系统将值作为命令行参数传递。如您所知,在 Linux 中,所有行都以“`
`”字符结尾。因此,所有换行符都与换行符一起保留。因此,我们使用 IFS 变量定义此字符。

#!/bin/bash
file=$(1)
IFS=$'
' for line in $(cat ${file}) do echo "${line}" ((i++)) done

保存上面创建的 shell 脚本并退出。现在,您必须使用此 shell 脚本编写您希望继续其输出换行符的文件名并运行它。

:~$ ./Linux.sh Linux.txt
Some popular Linux Distros are:
Ubuntu
Centos
Arch Linux
Rocky Linux
Alpine Linux

结论

有时我们需要在执行命令替换时获取实际输出。例如,如果文件中存在换行符,则在命令替换时不会保留它们。

在这里,我们了解了如何在将命令输出存储到变量时通过变量上的双引号、使用 shell 脚本和 here-string 来保留换行符。借助以上信息,您可以在 Linux 中命令替换时保留换行符。

更新于: 2024年11月12日

1K+ 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告