Bash脚本:从具有最高值和输出变量名称的数组中选择变量,而不是值

时间:2015-05-14 11:48:55

标签: bash

我有50个变量值一直在变化。它们的值是整数,例如1-9999,但在剧本运行之前,我不知道这些值是什么。

我需要显示具有最高值的变量的名称。实际价值对我来说并不重要。

变量称为Q1 - Q50。

示例:

Q34=22
Q1=23
Q45=3
Q15=99

输出必须说Q15

你能帮我正确的方向吗?

4 个答案:

答案 0 :(得分:3)

您可以使用variable indirection

for var in Q{1..50}; do
    [[ ${!var} -gt $max ]] && max=$var
done
echo \$$max

答案 1 :(得分:1)

要求所有的变种和grep你的:

set | egrep "^Q[0-9]=|^Q[1-4][0-9]=|^Q50=" | sort -nt= -k2 | tail -1 | cut -d= -f1

答案 2 :(得分:0)

这对我有用,例如Q1-Q5

Q1=22
Q2=23
Q3=3
Q4=99
Q5=16

for i in $(seq 1 5); do
    name=Q$i
    value=${!name}
    echo "$name $value"
done  | sort -k2n | tail -1 | awk '{print $1}'

你得到了

  

Q4

答案 3 :(得分:0)

使用间接变量扩展运行50个变量中的每个变量,然后保存其值最大的名称。

for ((i=1; i<= 50; i++)); do
    name=Q$i
    value=${!name}
    if ((value > biggest_value)); then
        biggest_value=$value
        biggest_name=name
    fi
done

printf "%s has the largest value\n" "$biggest_name"