zsh
:
print -r -- ${(Oa)=VAR}
$=VAR
dzieli $VAR
się $IFS
. (Oa)
porządkuje wynikową listę w odwrotnej kolejności tablicowej. print -r --
(jak w ksh
), to samo co echo -E -
( zsh
specyficzne) to niezawodne wersjeecho
: wypisuje swoje argumenty, gdy jest oddzielone spacją, zakończone znakiem nowej linii.
Jeśli chcesz podzielić tylko na spację, a nie na to, co $IFS
zawiera (spacja, tabulator, nowa linia, domyślnie nul), albo przypisz spację $IFS
, albo użyj jawnego podziału, takiego jak:
print -r -- ${(Oas: :)VAR}
Aby sortować w odwrotnej kolejności numerycznej:
$ 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 (tak też by działał bash
):
Z wbudowaną powłoką (z wyjątkiem printf
niektórych powłok) tylko mechanizmy (lepsze dla zmiennych o krótkiej wartości):
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"
Z awk
(lepiej dla dużych zmiennych, szczególnie z bash
, ale do granicy wielkości argumentów (lub pojedynczego argumentu)):
awk '
BEGIN {
n = split(ARGV[1], a);
while (n) {printf "%s", sep a[n--]; sep = " "}
print ""
}' "$VAR"