GNU/Linux >> Tutoriels Linux >  >> Linux

Inverser le contenu d'une variable par des mots

Sur les systèmes GNU, l'inverse de cat est tac :

$ tac -s" " <<< "$VAR "            # Please note the added final space.
100 90 80 70 60 50 40 30 20 10

Pour une liste courte, et dans une variable, le shell lui-même est la solution la plus rapide :

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

Sortie :

100 90 80 70 60 50 40 30 20 10 

Remarque :l'opération de fractionnement dans set -- $var est sûr pour la chaîne exacte utilisée ici, mais ne le sera pas si la chaîne contient des caractères génériques (* , ? ou [] ). Cela peut être évité avec set -f avant le fractionnement, si nécessaire. La même note est également valable pour les solutions suivantes (sauf indication contraire).

Ou, si vous souhaitez définir une autre variable avec la liste inversée :

var="10 20 30 40 50 60 70 80 90 100"
set -- $var
for i; do out="$i${out:+ }$out"; done
echo "$out"

Ou en utilisant uniquement les paramètres de position.

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"

Ou en utilisant une seule variable (qui peut être var lui-même):
Remarque :Cette solution n'est pas affectée par la globalisation ni par IFS.

var="10 20 30 40 50 60 70 80 90 100"

a=" $var"
while [[ $a ]]; do
    printf '<%s>' "${a##* }"
    var="${a% *}"
done

awk à la rescousse

$ 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


avec perl , courtoisie Comment lire une adresse IP à l'envers ? partagé par @steeldriver

$ echo "$var" | perl -lane '$,=" "; print reverse @F'
100 90 80 70 60 50 40 30 20 10


Ou, avec bash lui-même en convertissant la chaîne en tableau

$ 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 

Linux
  1. Comment faire une évaluation variable indirecte ?

  2. Variable externe dans Awk ?

  3. Éléments séparés des mots Camelcase ?

  4. Utiliser _roff pour souligner des mots ?

  5. `$?` ? Est-ce une variable ?

Variable d'exportation bash

Comment installer Maven sur Windows

Comment définir une variable d'environnement dans Bash

Qu'est-ce que le sous-shell sous Linux ?

Comment obtenir le contenu d'une page Web dans une variable shell ?

Shell - Écrire le contenu d'une variable dans un fichier