printf '%s\n' "${ARRAY[@]}" |
awk '$1 > m || NR == 1 { m = $1 } END { print m }'
Поскольку оболочка bash
не выполняет арифметические операции с плавающей запятой, проще сравнивать числа с плавающей запятой на другом языке. Здесь я использую awk
, чтобы найти максимум всех элементов в массиве ARRAY
.
Команда printf
выведет каждый элемент массива на отдельной строке, а код awk
обновит его значение m
, чтобы оно стало максимальным из просмотренных до сих пор значений. В конце печатается значение m
.
Проверка на NR == 1
будет истинной для первой строки, прочитанной программой awk
, и инициализирует значение m
первым значением массива (, что вы не можете сделать, это означает, что ваш код вернул бы 0
для массива со всеми отрицательными числами, если бы он работал ).