Auf GNU-Systemen ist die Umkehrung von cat tac:
$ tac -s" " <<< "$VAR " # Please note the added final space.
100 90 80 70 60 50 40 30 20 10
Für eine kurze Liste und in einer Variablen ist die Shell selbst die schnellste Lösung:
var="10 20 30 40 50 60 70 80 90 100"
set -- $var; unset a
for ((i=$#;i>0;i--)); do
printf '%s%s' "${a:+ }" "${!i}"
a=1
done
echo
Ausgabe:
100 90 80 70 60 50 40 30 20 10
Hinweis:die Split-Operation in set -- $var
ist sicher für genau die hier verwendete Zeichenfolge, aber nicht, wenn die Zeichenfolge Platzhalterzeichen enthält (*
, ?
oder []
). Dies kann mit set -f
vermieden werden vor der Teilung, falls erforderlich. Derselbe Hinweis gilt auch für die folgenden Lösungen (sofern nicht anders angegeben).
Oder, wenn Sie eine andere Variable mit der umgekehrten Liste setzen möchten:
var="10 20 30 40 50 60 70 80 90 100"
set -- $var
for i; do out="$i${out:+ }$out"; done
echo "$out"
Oder nur die Positionsparameter verwenden.
var="10 20 30 40 50 60 70 80 90 100"
set -- $var
a=''
for i
do set -- "$i${a:+ [email protected]}"
a=1
done
echo "$1"
Oder verwenden Sie nur eine Variable (die var selbst sein kann):
Hinweis:Diese Lösung ist nicht von Globing oder IFS betroffen.
var="10 20 30 40 50 60 70 80 90 100"
a=" $var"
while [[ $a ]]; do
printf '<%s>' "${a##* }"
var="${a% *}"
done
awk
zur Rettung
$ var='10 20 30 40 50 60 70 80 90 100'
$ echo "$var" | awk '{for(i=NF; i>0; i--) printf i==1 ? $i"\n" : $i" "}'
100 90 80 70 60 50 40 30 20 10
mit perl
, Höflichkeit Wie liest man eine IP-Adresse rückwärts? geteilt von @steeldriver
$ echo "$var" | perl -lane '$,=" "; print reverse @F'
100 90 80 70 60 50 40 30 20 10
Oder mit bash
sich selbst, indem sie den String in ein Array umwandelt
$ arr=($var)
$ for ((i=${#arr[@]}-1; i>=0; i--)); do printf "${arr[i]} "; done; echo
100 90 80 70 60 50 40 30 20 10