在 'bash' 中以数组形式访问 'cat' 输出

Access 'cat' output as an array in 'bash'

我正在尝试访问数组中常规 'cat' 输出的一些数值。

如果我这样做:cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies

我得到:51000 102000 204000 312000 ...

所以我编写了如下脚本来获取数组中的所有元素,并尝试获取元素的数量。

vAvailableFrequencies=$(sudo cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies)
nAvailableFrequencies=${#vAvailableFrequencies[@]}

问题是nAvailableFrequencies 等于数组的字符个数,而不是元素的个数

我们的想法是能够访问每个元素:

for (( i=0;i<$nAvailableFrequencies;i++)); do
   element=${vAvailableFrequencies[$i]
done

这在 bash 中是否可行,而无需执行顺序读取之类的操作并在数组中逐个插入元素?

您只需要在 vAvailableFrequencies 作业周围加上另一组括号:

vAvailableFrequencies=($(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies))
nAvailableFrequencies=${#vAvailableFrequencies[@]}

现在您可以在 for 循环内访问,或单独使用 ${vAvailableFrequencies[i]},其中 i 是元素的编号

你可以像这样使用数组:

arr=($(</sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies))

nAvailableFrequencies=${#arrr}
  • $(<file) 读取并输出一个文件内容,而 (...) 创建一个数组。

如果您使用的是 bash 4 或更高版本,请使用

readfile -t vAvailableFrequencies < /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies

(或者,如果您需要使用 sudo

readfile -t vAvailableFrequencies < <(sudo cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies)

)