我正在尝试访问一些常规'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中执行,而不是像顺序读取和逐个插入数组中的元素一样?
答案 0 :(得分:3)
你可以使用这样的数组:
arr=($(</sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies))
nAvailableFrequencies=${#arrr}
$(<file)
在(...)
创建数组时读取并输出文件内容。答案 1 :(得分:1)
您只需在vAvailableFrequencies
作业周围添加另一组括号:
vAvailableFrequencies=($(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies))
nAvailableFrequencies=${#vAvailableFrequencies[@]}
现在,您可以在for循环中访问,也可以单独使用${vAvailableFrequencies[i]}
,其中i
是元素的编号
答案 2 :(得分:1)
如果您使用的是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)
)