Bash

如何列印具有數組作為值的bash變數

  • September 1, 2014

我為我的dwm狀態欄寫了一個腳本。其中一部分是查找我係統上每個核心的目前 cpu 使用情況。我自己想出了一個辦法,但我需要一些幫助來修復這個錯誤。這是命令:top -bn 2 -d 0.5 | grep -F '%Cpu' | tail -n 4 | awk '{print $3}'。這假設您top預設顯示每個核心。您可以通過發出top然後按1然後按W將目前配置保存到.toprc主文件夾中的文件來實現此目的。每次你top現在打開它都會顯示你所有的核心。我前面提到的命令有一個缺點,當分配給這樣的變數時:

CPU=$(top -bn 2 -d 0.5 | grep -F '%Cpu' | tail -n 4 | awk '{print $3}')

然後像這樣使用$CPUwith xsetrootxsetroot -name "$CPU"我將在狀態欄中獲得我想要的輸出,但在每個 cpu 百分比之間,將有兩個相互重疊的符號將它們vt. 我該如何擺脫它們?這與我可能在這裡使用數組而不是字元串有關嗎?

您可以在圖片左側看到問題。

命令:

top -bn 2 -d 0.5 | grep -F '%Cpu' | tail -n 4 | awk '{print $3}'

樣本輸出:

14.3
12.0
8.0
10.0

使用此腳本的任何人請注意:當核心的 cpu 使用率達到100%命令輸出的數組時,會將目前負載的列從 column 移動3到 column 2。因此,awk '{print $3}'您將看到us,column 的輸出3。如果你沒問題,就離開吧。如果沒有,你也可以有awkprint 列2。它只是:。避免所有這些陷阱的解決方案是:

top -bn 2 | grep -F '%Cpu' | tail -n 4 | gawk '{print $2 $3}' | tr -s '\n\:\,[:alpha:]' ' '

值之間的“東西”對我來說似乎是換行符的視覺表示(八進製字元程式碼 12),您在使用時會得到:

echo -e 'a\012b'

您可以嘗試將輸出通過管道傳輸,tr '\n' ' '如下所示:

echo -e 'a\012b' | tr '\n' ' '

引用自:https://unix.stackexchange.com/questions/153029