Bash比较数组值以查找最大值

时间:2014-03-01 20:50:09

标签: arrays bash

我试图在bash中找到整数数组中的最大值。我对bash很新。 这是我到目前为止所拥有的......

    max="${array[0]}"
    for ((i=0;i<${#array[@]};i++))
    do  
        if [ ${array[$i]} > $max ]
        then
            max="${array[$i]}"

        fi
    done

其中数组大约是500个正整数。 24 27 13 34 2 104 645 411 1042 38 5 24 120 236 2 33 6。目前它总是返回我的数组中的最后一个整数。似乎它应该是一个简单的解决方案,但我不确定我缺少什么。谢谢你的帮助。

2 个答案:

答案 0 :(得分:5)

此测试[ ${array[$i]} > $max ]正在执行词汇比较,因此99大于100

你想要其中一个:

[[ ${array[$i]} -gt $max ]]   # numeric comparison operator
(( ${array[$i]} > $max ))     # arithmetic evaluation

或者,使用可能会更快的标准工具,尽管必须产生一些额外的过程:

max=$( printf "%d\n" "${array[@]}" | sort -n | tail -1 )

答案 1 :(得分:1)

不是迭代索引,而是遍历项本身。更具体地说明您的实际问题,请确保您进行算术比较,而不是字符串比较。

max="${array[0]}"
for i in "${array[@]}"; do
    (( i > $max )) && max=$i
done