zsh
:
print -r -- ${(Oa)=VAR}
$=VAR
分割$VAR
上$IFS
。(Oa)
以反向数组顺序排序结果列表。print -r --
(如中的ksh
),与echo -E -
(zsh
特定)相同是的可靠版本echo
:打印其参数,并按空格分隔,并以换行符终止。
如果您只想在空间上拆分,而不是在任何$IFS
包含的内容上拆分(默认情况下是空格,制表符,换行符,nul),请为分配空间$IFS
,或使用类似以下的显式拆分:
print -r -- ${(Oas: :)VAR}
以相反的数字顺序排序:
$ 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(因此也可以使用bash
):
仅使用内置的shell(printf
某些shell中除外)机制(对于具有短值的变量更好):
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"
With awk
(最好使用大变量,尤其是with bash
,但要达到参数(或单个参数)大小的限制):
awk '
BEGIN {
n = split(ARGV[1], a);
while (n) {printf "%s", sep a[n--]; sep = " "}
print ""
}' "$VAR"