zsh
:
print -r -- ${(Oa)=VAR}
$=VAR
divide $VAR
em $IFS
. (Oa)
ordena a lista resultante na ordem inversa da matriz. print -r --
(como em ksh
), o mesmo que echo -E -
( zsh
específico) é uma versão confiável deecho
: imprime seus argumentos como estão separados por espaço, finalizados por nova linha.
Se você deseja dividir somente no espaço, e não no $IFS
conteúdo (espaço, tabulação, nova linha, nul por padrão), atribua espaço $IFS
ou use uma divisão explícita como:
print -r -- ${(Oas: :)VAR}
Para classificar em ordem numérica inversa:
$ VAR='50 10 20 90 100 30 60 40 70 80'
$ print -r -- ${(nOn)=VAR}
100 90 80 70 60 50 40 30 20 10
POSIXly (assim também funcionaria bash
):
printf
Somente com mecanismos embutidos no shell (exceto em alguns shells) (melhor para variáveis com um valor curto):
unset -v IFS # restore IFS to its default value of spc, tab, nl
set -o noglob # disable glob
set -- $VAR # use the split+glob operator to assign the words to $1, $2...
reversed_VAR= sep=
for i do
reversed_VAR=$i$sep$reversed_VAR
sep=' '
done
printf '%s\n' "$reversed_VAR"
With awk
(melhor para variáveis grandes, especialmente com bash
, mas até o limite do tamanho dos argumentos (ou de um único argumento)):
awk '
BEGIN {
n = split(ARGV[1], a);
while (n) {printf "%s", sep a[n--]; sep = " "}
print ""
}' "$VAR"