從 cut 語句產生帶有空格分隔符號的單字字串

從 cut 語句產生帶有空格分隔符號的單字字串

我是 bash 新手。當我運行以下命令:

grep "type" /root/myFile | cut-d'=' -f2

我得到以下資訊:

102
304
503
442

我想將第一個命令的內容儲存到一個變數中,這樣該變數的內容就相當於這樣宣告它:

myVariable="102 304 503 442"

我不知道該怎麼辦。我是否myVariable使用空字串進行初始化並逐行遍歷命令列的內容並將其附加到 myVariable 中,中間有空格,或者是否有更簡單的方法可以使用 bash 執行此操作?

答案1

您可以bash使用命令替換然後參數擴展來自行完成此操作。

首先使用命令替換將命令的輸出放入變數中$(),然後使用參數擴展將所有換行符號替換為空格${variable//$'\n'/ }

$ myVariable=$(grep "type" /root/myFile | cut-d'=' -f2) 
$ myVariable=${myVariable//$'\n'/ }
$ echo $myVariable
102 304 503 442

但為了可重複使用性和清潔性,你最好使用陣列:

myArray=( $(grep "type" /root/myFile | cut-d'=' -f2) )

並以通常的方式迭代數組元素。

答案2

myVariable=`grep "type" /root/myFile | cut-d'=' -f2`

運行反引號 (`) 之間的內容並將輸出分配給myVariable.

如果您目前的輸出由換行符號 ( \n) 分隔,那麼您可能需要將它們替換為空格,例如tr

myVariable=`grep "type" /root/myFile | cut-d'=' -f2`|tr '\n' ' '`

注意:有些人喜歡使用$()語法而不是反引號,但兩者都很有用,當我可以選擇時,我會使用反引號。兩者兼具的真正優點是,如果您想在兩個層級處理執行,因為反引號表達式將首先傳送到子 shell,然後$()執行該部分。

相關內容