我有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