zsh
:
print -r -- ${(Oa)=VAR}
$=VAR
membagi $VAR
pada $IFS
. (Oa)
memesan daftar yang dihasilkan dalam urutan array terbalik. print -r --
(seperti dalam ksh
), sama dengan echo -E -
( zsh
spesifik) adalah versi yang dapat diandalkanecho
: mencetak argumennya sebagai-dipisahkan oleh ruang, diakhiri oleh baris baru.
Jika Anda ingin membagi pada ruang saja, dan bukan pada apa pun yang $IFS
berisi (spasi, tab, baris baru, nul secara default), tetapkan ruang untuk $IFS
, atau gunakan pemisahan eksplisit seperti:
print -r -- ${(Oas: :)VAR}
Untuk mengurutkan dalam urutan angka terbalik:
$ 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 (demikian juga akan bekerja dengan bash
):
Hanya dengan printf
mekanisme builtin shell (kecuali untuk beberapa shell) (lebih baik untuk variabel dengan nilai pendek):
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"
Dengan awk
(lebih baik untuk variabel besar, terutama dengan bash
, tetapi hingga batas ukuran argumen (atau argumen tunggal)):
awk '
BEGIN {
n = split(ARGV[1], a);
while (n) {printf "%s", sep a[n--]; sep = " "}
print ""
}' "$VAR"