在'bash'中将'cat'输出作为数组访问

时间:2015-08-18 12:01:57

标签: arrays linux bash shell scripting

我正在尝试访问一些常规'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中执行,而不是像顺序读取和逐个插入数组中的元素一样?

3 个答案:

答案 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)