zsh
:
print -r -- ${(Oa)=VAR}
$=VAR
chia tách $VAR
trên $IFS
. (Oa)
sắp xếp danh sách kết quả theo thứ tự mảng ngược. print -r --
(như trong ksh
), giống như echo -E -
( zsh
cụ thể) là một phiên bản đáng tin cậy củaecho
: in các đối số của nó dưới dạng được phân tách bằng dấu cách, kết thúc bằng dòng mới.
Nếu bạn chỉ muốn phân tách trên không gian chứ không phải trên bất kỳ thứ gì $IFS
có chứa (khoảng trắng, tab, dòng mới, nul theo mặc định), hoặc gán không gian cho $IFS
hoặc sử dụng phân tách rõ ràng như:
print -r -- ${(Oas: :)VAR}
Để sắp xếp theo thứ tự số ngược:
$ 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 (cũng sẽ làm việc với bash
):
Với các printf
cơ chế dựng sẵn shell (ngoại trừ trong một số shell) chỉ (tốt hơn cho các biến có giá trị ngắn):
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"
Với awk
(tốt hơn cho các biến lớn, đặc biệt là với bash
, nhưng đến giới hạn kích thước của các đối số (hoặc của một đối số)):
awk '
BEGIN {
n = split(ARGV[1], a);
while (n) {printf "%s", sep a[n--]; sep = " "}
print ""
}' "$VAR"