zsh
:
print -r -- ${(Oa)=VAR}
$=VAR
se divide $VAR
en $IFS
. (Oa)
ordena la lista resultante en orden de matriz inversa. print -r --
(como en ksh
), lo mismo que echo -E -
( zsh
específico) es una versión confiable deecho
: imprime sus argumentos tal como están separados por espacio, terminados por nueva línea.
Si desea dividir solo en el espacio, y no en lo que sea que $IFS
contenga (espacio, tabulación, nueva línea, nul por defecto), asigne espacio $IFS
o use una división explícita como:
print -r -- ${(Oas: :)VAR}
Para ordenar en orden numérico inverso:
$ 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 (también funcionaría con bash
):
Con printf
mecanismos incorporados de shell (excepto en algunos shells) solamente (mejor para variables con un valor corto):
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"
Con awk
(mejor para variables grandes, especialmente con bash
, pero hasta el límite del tamaño de los argumentos (o de un solo argumento)):
awk '
BEGIN {
n = split(ARGV[1], a);
while (n) {printf "%s", sep a[n--]; sep = " "}
print ""
}' "$VAR"