將命令輸出儲存到變數時保留換行符


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+ 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告