zsh
:
print -r -- ${(Oa)=VAR}
$=VAR
แยกบน$VAR
สั่งรายการผลลัพธ์ในลำดับอาเรย์กลับ (เหมือนใน) เหมือนกับ( เฉพาะ) เป็นรุ่นที่เชื่อถือได้ของ : พิมพ์อาร์กิวเมนต์ตามที่ - ถูกคั่นด้วยช่องว่างสิ้นสุดด้วยการขึ้นบรรทัดใหม่$IFS
(Oa)
print -r --
ksh
echo -E -
zsh
echo
หากคุณต้องการแยกพื้นที่เท่านั้นและไม่ได้อยู่ในสิ่งที่$IFS
มี (ช่องว่างแท็บบรรทัดใหม่ศูนย์โดยค่าเริ่มต้น) กำหนดพื้นที่ให้$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 builtin (ยกเว้น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"