我有50个变量值一直在变化。它们的值是整数,例如1-9999,但在剧本运行之前,我不知道这些值是什么。
我需要显示具有最高值的变量的名称。实际价值对我来说并不重要。
变量称为Q1 - Q50。
示例:
Q34=22
Q1=23
Q45=3
Q15=99
输出必须说Q15
你能帮我正确的方向吗?
答案 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"