printf '%s, ' `seq 1 10 | shuf`
คุณไม่ต้องการแม้แต่การfor
วนซ้ำ
เอาท์พุท
7, 3, 4, 10, 2, 9, 1, 8, 5, 6,
ในการรับมันมาในเชลล์อาเรย์คุณต้องทำ:
( set -- $(seq 1 10 | shuf) ; printf '%s, ' "$@" )
เอาท์พุท
5, 9, 7, 2, 4, 3, 6, 1, 10, 8,
แล้วพวกมันก็อยู่ในเปลือกของคุณ
ถ้าคุณได้มันมาในอาร์เรย์ของเชลล์คุณไม่จำเป็นต้องprintf
:
( set -- $(seq 1 10 | shuf); IFS=, ; echo "$*" )
เอาท์พุท
9,4,10,3,1,2,7,5,6,8
โดยวิธีการseq
และprintf
ถูกสร้างขึ้นมาเพื่อกันและกัน เช่นถ้าฉันต้องการที่จะทำซ้ำสตริง 1,000 ครั้ง?
printf 'a string\n%.0b' `seq 1 1000`
เอาท์พุท
a string
... 999 a string
สายในภายหลัง ...
a string
หรือ...
printf 'a string,%.0b' `seq 1 10`
เอาท์พุท
a string,a string,a string,a string,a string,a string,a string,a string,a string,a string,
ฉันต้องการรันคำสั่ง 39 ครั้งหรือไม่
printf 'echo "run %d"\n' `seq 1 39` | . /dev/stdin
เอาท์พุท
run 1
... 38 run
บรรทัดในภายหลัง ...
run 39
echo $(seq 10 | shuf)
เข้ามาใกล้ แต่ไม่ทำเครื่องหมายจุลภาค