Bash
如何列印具有數組作為值的bash變數
我為我的
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}')
然後像這樣使用
$CPU
withxsetroot
:xsetroot -name "$CPU"
我將在狀態欄中獲得我想要的輸出,但在每個 cpu 百分比之間,將有兩個相互重疊的符號將它們v
和t
. 我該如何擺脫它們?這與我可能在這裡使用數組而不是字元串有關嗎?您可以在圖片左側看到問題。
命令:
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
到 column2
。因此,awk '{print $3}'
您將看到us,
column 的輸出3
。如果你沒問題,就離開吧。如果沒有,你也可以有awk
print 列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' ' '