GNU/Linux >> Belajar Linux >  >> Linux

Membalik isi variabel dengan kata-kata

Pada sistem GNU, kebalikan dari cat adalah tac:

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

Untuk daftar singkat, dan dalam variabel, shell itu sendiri adalah solusi tercepat:

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

Keluaran:

100 90 80 70 60 50 40 30 20 10 

Catatan:operasi split di set -- $var aman untuk string persis yang digunakan di sini, tetapi tidak akan aman jika string berisi karakter wildcard (* , ? atau [] ). Ini dapat dihindari dengan set -f sebelum pemisahan, jika diperlukan. Catatan yang sama juga berlaku untuk solusi berikut (kecuali jika disebutkan).

Atau, jika Anda ingin menyetel beberapa variabel lain dengan daftar terbalik:

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

Atau hanya menggunakan parameter posisi.

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"

Atau hanya menggunakan satu variabel (yang mungkin merupakan var itu sendiri):
Catatan:Solusi ini tidak terpengaruh oleh globing atau IFS.

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

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

awk untuk menyelamatkan

$ 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


dengan perl , kesopanan Bagaimana cara membaca alamat IP mundur? dibagikan oleh @steeldriver

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


Atau, dengan bash sendiri dengan mengubah string menjadi array

$ 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. Bagaimana Melakukan Evaluasi Variabel Tidak Langsung?

  2. Elemen Terpisah Dari Kata Unta?

  3. Gunakan _roff Untuk Menggarisbawahi Kata?

  1. `$?` ? Apakah Itu Variabel?

  2. Alias ​​​​dengan variabel di bash

  3. Shell - Tulis konten variabel ke file

  1. Skrip bash(I)

  2. Nama Variabel Bash Dinamis (variabel)?

  3. bash - pencocokan variabel case-insensitive