我有50个变量始终更改值。它们的值是整数,例如1-9999,但我不知道这些值是什么,直到脚本运行。Bash脚本:从数组中选择具有最高值和输出变量名称的变量,而不是值
我需要显示具有最高值的变量的名称。实际价值对我来说并不重要。
这些变量被称为Q1 - Q50。
例子:
Q34=22
Q1=23
Q45=3
Q15=99
输出必须只说Q15
能否请你帮我在正确的方向?
我有50个变量始终更改值。它们的值是整数,例如1-9999,但我不知道这些值是什么,直到脚本运行。Bash脚本:从数组中选择具有最高值和输出变量名称的变量,而不是值
我需要显示具有最高值的变量的名称。实际价值对我来说并不重要。
这些变量被称为Q1 - Q50。
例子:
Q34=22
Q1=23
Q45=3
Q15=99
输出必须只说Q15
能否请你帮我在正确的方向?
您可以使用variable indirection此:
for var in Q{1..50}; do
[[ ${!var} -gt $max ]] && max=$var
done
echo \$$max
谢谢乔希。像魅力和最少量的代码一样工作。工作很好,再次感谢。 – awenis
使用间接变量扩展运行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"
谢谢Chepner,我感谢所有的帮助。 – awenis
向所有瓦尔和grep你:
set | egrep "^Q[0-9]=|^Q[1-4][0-9]=|^Q50=" | sort -nt= -k2 | tail -1 | cut -d= -f1
有你使用不同的变量与数字后缀的任何理由,而不是一个真正的阵列?如果你使用了一个带有元素'$ {Q [0]}','$ {Q [1]}'的真实数组,那么这会容易得多。 –
@Tom:使用单独的变量可启用无循环的解决方案,调用'set'。 –
我想我可以使用元素汤姆。正如我所说我是一个noob,所以我没有看到光线;) – awenis