如何打印以数组为值的 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我将在状态栏中得到我想要的输出,但在每个 cpu 百分比之间,将有两个符号彼此分开,将它们和。我该如何摆脱它们?这与我在这里使用数组而不是字符串有什么关系吗?xsetrootxsetroot -name "$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%命令输出的阵列时,会将具有当前负载的列从一个列移动到3另一个列2。因此,awk '{print $3}'您将看到us,column 的输出3。如果你对此没意见,那就离开吧。如果没有,你也可以有awk打印栏。2就这样吧:。避免所有这些陷阱的解决方案是:

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

答案1

对我来说,值之间的“东西”似乎是换行符的视觉表示(八进制字符代码 12),您在使用时会得到:

echo -e 'a\012b'

您可以尝试将输出通过管道传输,tr '\n' ' '如下所示:

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

相关内容