GNU/Linux >> Znalost Linux >  >> Linux

Obrácení obsahu proměnné slovy

Na systémech GNU je rub cat tac:

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

Pro krátký seznam a v proměnné je nejrychlejším řešením samotný shell:

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

Výstup:

100 90 80 70 60 50 40 30 20 10 

Poznámka:operace rozdělení v set -- $var je bezpečný pro přesně zde použitý řetězec, ale nebude tomu tak, pokud řetězec obsahuje zástupné znaky (* , ? nebo [] ). Tomu se lze vyhnout pomocí set -f před rozdělením, v případě potřeby. Stejná poznámka platí také pro následující řešení (pokud není uvedeno jinak).

Nebo, pokud chcete nastavit jinou proměnnou s obráceným seznamem:

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

Nebo pomocí pouze pozičních parametrů.

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"

Nebo pomocí pouze jedné proměnné (což může být samotná var):
Poznámka:Toto řešení není ovlivněno globingem ani IFS.

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

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

awk na záchranu

$ 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


s perl , laskavost Jak číst IP adresu zpětně? sdíleno @steeldriver

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


Nebo pomocí bash převodem řetězce na pole

$ 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. Bash skriptování (I)

  2. Jak provést nepřímé vyhodnocení proměnných?

  3. Najít N nejfrekventovanějších slov v souboru?

  1. Samostatné prvky slov Camelcase?

  2. `$?` ? Je to proměnná?

  3. Jak získat obsah webové stránky v proměnné shellu?

  1. Bash Dynamické (proměnné) názvy proměnných?

  2. Shell - Zápis proměnného obsahu do souboru

  3. bash - shoda proměnné bez ohledu na velikost písmen