zsh
:
print -r -- ${(Oa)=VAR}
$=VAR
spaltet sich $VAR
auf $IFS
. (Oa)
ordnet die resultierende Liste in umgekehrter Reihenfolge an. print -r --
(wie in ksh
), genauso wie echo -E -
( zsh
spezifisch) eine zuverlässige Version vonecho
: druckt seine Argumente so, wie sie durch ein Leerzeichen getrennt und durch eine neue Zeile abgeschlossen sind.
Wenn Sie nur nach Leerzeichen und nicht nach den darin $IFS
enthaltenen Elementen (Leerzeichen, Tabulator, Zeilenvorschub, Null) teilen möchten, weisen Sie entweder Leerzeichen zu $IFS
oder verwenden Sie eine explizite Aufteilung wie folgt :
print -r -- ${(Oas: :)VAR}
So sortieren Sie in umgekehrter numerischer Reihenfolge:
$ 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 (so würde es auch funktionieren bash
):
Mit eingebauter Shell (außer printf
in einigen Shells) nur Mechanismen (besser für Variablen mit einem kurzen Wert):
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"
Mit awk
(besser für große Variablen, insbesondere mit bash
, aber bis zur Grenze der Größe der Argumente (oder eines einzelnen Arguments)):
awk '
BEGIN {
n = split(ARGV[1], a);
while (n) {printf "%s", sep a[n--]; sep = " "}
print ""
}' "$VAR"