สร้างลำดับของตัวเลขจากอินพุตที่มนุษย์สามารถอ่านได้


2

ในทุบตีฉันมีโปรแกรมที่แสดงรายการตัวเลือกของไฟล์ที่จะดาวน์โหลดจากนั้นให้ผู้ใช้เลือกบางไฟล์ ฉันต้องการให้ผู้ใช้พิมพ์สิ่งที่ต้องการ1-6,8,11-12ดาวน์โหลดไฟล์ 1, 2, 3, 4, 5, 6, 8, 11 และ 12 ฉันจะสร้างลำดับของตัวเลขได้อย่างไร (เพื่อใส่forวนซ้ำ ) จากอินพุตที่มนุษย์อ่านได้ประเภทนี้หรือไม่

คำตอบ:


3
echo 1-6,8,11-12 | tr -cd "0-9,\n-" | tr "," "\n" | while IFS=- read A B; do eval echo {$A..${B:-$A}}; done | tr "\n" " "

เอาท์พุท:

1 2 3 4 5 6 8 11 12

เอาท์พุทของฉัน {1..6} {8..8} {11..12} เวอร์ชั่น Bash 4.3.25 (2) -release (on FreeBSD)
Suchipi

ทางออกที่เรียบร้อยมาก! น่าเสียดายที่มันไม่ได้ผลกับ @Suchipi - บางทีการขยายตัวของวงเล็บปีกกาจะไม่เปิดโดยค่าเริ่มต้นใน FreeBSD และset -Bเป็นสิ่งจำเป็น
AFH

@Suchipi: ฉันได้ทดสอบด้วย bash 4.3.11 (1) -release (Ubuntu 14.04) ลองevalด้วยเครื่องหมายอัญประกาศ:echo 1-6,8,11-12 | tr -cd "0-9,\n-" | tr "," "\n" | while IFS=- read A B; do eval "echo {$A..${B:-$A}}"; done | tr "\n" " "
Cyrus

ฉันพยายามวางecho {1..10}ในสคริปต์ของฉันและมันจะกลายเป็นดีดังนั้นมันจะต้องเป็นสิ่งที่มี1 2 3 4 5 6 7 8 9 10 ในตัวใช่มั้ย ถ้าไม่มันอาจจะใช้ผิดหรือเปล่า? แก้ไข: เราแสดงความคิดเห็นกัน ดูเหมือนว่าการเพิ่มราคาจะไม่ได้ผลสำหรับฉัน evalevaleval
Suchipi

1
ไม่เป็นไร - ฉันแค่โง่และลืมว่าเชลล์เริ่มต้นของฉันคืออะไร ใช้งานได้ดี!
Suchipi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.