zsh
:
print -r -- ${(Oa)=VAR}
$=VAR
se divise $VAR
sur $IFS
. (Oa)
ordonne la liste résultante dans l'ordre inverse des tableaux. print -r --
(comme dans ksh
), de même que echo -E -
( zsh
spécifique) est une version fiable deecho
: affiche ses arguments comme-est séparé par un espace, terminé par une nouvelle ligne.
Si vous souhaitez diviser uniquement sur l'espace, et non sur tout ce qui $IFS
contient (espace, tabulation, nouvelle ligne, nul par défaut), affectez de l'espace à $IFS
, ou utilisez un fractionnement explicite comme:
print -r -- ${(Oas: :)VAR}
Pour trier dans l'ordre numérique inverse:
$ 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 (cela fonctionnerait également avec bash
):
Avec les mécanismes internes du shell (sauf pour printf
certains shells) uniquement (mieux pour les variables avec une valeur courte):
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"
Avec awk
(mieux pour les grandes variables, surtout avec bash
, mais jusqu'à la limite de la taille des arguments (ou d'un seul argument)):
awk '
BEGIN {
n = split(ARGV[1], a);
while (n) {printf "%s", sep a[n--]; sep = " "}
print ""
}' "$VAR"