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
):
シェル組み込み(printf
一部のシェルを除く)メカニズムのみ(値が短い変数の場合):
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"
awk
(特にと、大規模な変数のためのより良いbash
)が、引数の大きさの限度まで(または単一の引数の):
awk '
BEGIN {
n = split(ARGV[1], a);
while (n) {printf "%s", sep a[n--]; sep = " "}
print ""
}' "$VAR"