zsh
:
print -r -- ${(Oa)=VAR}
$=VAR
divide $VAR
su $IFS
. (Oa)
ordina l'elenco risultante in ordine inverso di array. print -r --
(come in ksh
), uguale a echo -E -
( zsh
specifico) è una versione affidabile diecho
: stampa i suoi argomenti come è separato dallo spazio, terminato da newline.
Se vuoi dividere solo sullo spazio e non su ciò che $IFS
contiene (spazio, tab, newline, nul per impostazione predefinita), assegna lo spazio $IFS
o usa una suddivisione esplicita come:
print -r -- ${(Oas: :)VAR}
Per ordinare in ordine numerico 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 (quindi funzionerebbe anche con bash
):
Solo con printf
meccanismi di shell incorporati (tranne che in alcune shell) (meglio per variabili con un valore breve):
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
(meglio per variabili di grandi dimensioni, in particolare con bash
, ma fino al limite della dimensione degli argomenti (o di un singolo argomento)):
awk '
BEGIN {
n = split(ARGV[1], a);
while (n) {printf "%s", sep a[n--]; sep = " "}
print ""
}' "$VAR"