Você não faz. Você usa sort
:
$ echo ${array[@]}
1 8 14 -4 123 12
$ printf '%s\n' "${array[@]}" | sort -n
-4
1
8
12
14
123
E para fazer uma função:
mysort(){
printf '%s\n' "$@" | sort -n
}
array=(1 8 14 -4 123 12)
mysort "${array[@]}"
Se você realmente quiser, você pode tentar implementar um algoritmo de classificação no bash. Pode ser mais simples bater na sua cabeça algumas vezes contra a parede. Você realmente não quer escrever esse tipo de coisa em uma linguagem shell. Ainda assim, se você insistir, você pode usar algo assim (reimplementado no bash de um dos exemplos aqui ):
mysort(){
for((i=${#array[@]}-1;i>=0; i--)); do
for((j=1;j<=$i; j++)); do
if [[ ${array[j-1]} -gt ${array[j]} ]]; then
temp="${array[j-1]}"
array[j-1]="${array[j]}"
array[j]="$temp"
fi
done
done
}
declare -a array=(1 8 14 -4 123 12)
mysort $array
printf '%s\n' "${array[@]}"
Sério, no entanto, não repito, tente fazer qualquer tarefa séria de computação no shell. Existem melhores ferramentas para isso. Qualquer meio decadente linguagem de script, por exemplo, já terá métodos que permitem classificar. Por exemplo:
-
Perl
$ perl -le '@array=(1,8,14,-4,123,12); print join " ", sort @array' -4 1 12 123 14 8
-
Python
$ python -c 'array = [1,8,14,-4,123,12]; array.sort(); print(array)' [-4, 1, 8, 12, 14, 123]