【发布时间】:2019-03-23 07:46:50
【问题描述】:
我正在尝试打印数组中最大值的索引值。我写了这样的东西:
my_array=( $(cat /etc/grub.conf | grep title | cut -d " " -f 5,7 | tr -d '()'|cut -c1-6) )
echo "${my_array[*]}" | sort -nr | head -n1
max=${my_array[0]}
for v in ${my_array[@]}; do
if (( $v > $max )); then max=$v; fi;
done
echo $max
这个脚本的输出如下:
4.9.85 4.9.38
./grub_update.sh: line 6: ((: 4.9.85 > 0 : syntax error: invalid arithmetic operator (error token is ".9.85 > 0 ")
./grub_update.sh: line 6: ((: 4.9.38 > 0 : syntax error: invalid arithmetic operator (error token is ".9.38 > 0 ")
0
要求:我要查询 grub.conf 并读取 Kenrnel 行,然后打印数组中最新内核的索引值
kernel /boot/vmlinuz-4.9.38-16.35.amzn1.x86_64 root=LABEL=/ console=tty1 console=ttyS0 selinux=0
【问题讨论】:
-
Bash 无法将 4.9.85 与 0 进行比较...看起来您需要的不仅仅是一个简单的循环。
-
对不起,我刚刚更新了代码,目前我可以得到一个输出,但是在我寻找更大的数字时它会抛出更低的值
-
如果你想进行版本排序,这就是 GNU sort
-V参数的用途。 -
顺便说一句,
array=( $(...) )是一种反模式;见BashPitfalls #50。