Score:0

ในขณะที่ $value != [a..b]

ธง in

ฉันกำลังพยายามเขียนฟังก์ชันที่เขียนค่าใหม่ตามตัวเลือกของผู้ใช้ จนถึงตอนนี้ดูเหมือนว่า:

ในขณะที่ [[ $code_id != [1-28] ]]; ทำ
echo "กรุณาเลือกค่า..."
เสียงสะท้อน "1. ก"
เสียงสะท้อน "2. ข"
เสียงสะท้อน "3. ค"
เสียงสะท้อน "4. ง"
...
เสียงสะท้อน "28. Z"
เสร็จแล้ว
echo "INFO: รหัสคือ $code_id"

ผู้ใช้ควรเขียนหมายเลขที่เลือก (1-28) แต่ด้วยเหตุนี้ รหัสจึงส่งคืนตัวเลือกให้ฉัน ฉันเข้าใจว่าเหตุผลใดในเงื่อนไข (ในขณะที่... ทำ) แต่ฉันควรเขียนสิ่งนี้เพื่อให้โค้ดทำงานอย่างไร

hr flag
คุณกำลังพยายามทำอะไรที่นี่ (1) คุณไม่เคยกำหนดค่าให้กับ `code_id` และ (2) `[1-28]` ตรงกับหลัก 1,2 และ 8 เท่านั้น - ไม่ใช่ช่วงตัวเลขตั้งแต่ 1 ถึง 28 บางทีคุณอาจกำลังมองหา [ เลือกวนซ้ำ](https://askubuntu.com/a/1716/178692)?
cn flag
คุณมี 28 ตัวอักษรในตัวอักษรของคุณ?
Bruyi avatar
in flag
@Rinzwind ฉันมีตัวอักษรมากกว่า 10 ตัว จำนวนหลักในตัวเลขมี 1 หรือ 2 อะไร: ถ้าฉันสร้างช่วง `$code_id = [1-9]` ฉันสามารถไปในขั้นต่อไปได้ แต่อีกอัน (`[ 1-10]` ตัวอย่างเช่น) - ขั้นตอนนี้กำลังทำซ้ำ
Score:3
ธง cn

นี่คือวิธีแก้ปัญหาที่เป็นไปได้วิธีหนึ่งซึ่งใช้การวนซ้ำไม่สิ้นสุดซึ่งมีเงื่อนไขอยู่ภายใน

#!/bin/bash

ในขณะที่จริง
ทำ
  อ่าน -p "ป้อนค่า:" ค่า

  ถ้า [[ $value =~ ^[0-9]{1,2}$ ]] && ((value <= 28)); แล้วทำลาย; ไฟ
  # เป็นตัวเลขหนึ่งหรือสองหลัก และถ้าจริง จะน้อยกว่าหรือเท่ากับ 28 หรือไม่
เสร็จแล้ว

echo "ค่าคือ ${value}"

ช่วงภายในนิพจน์ทั่วไปใช้ไม่ได้ในวิชาคณิตศาสตร์ คิดเกี่ยวกับช่วงนี้เป็นช่วงของอักขระตามลำดับจาก ตารางแอสกี. ก็เลยกำหนดตัวละคร [1-28] ประกอบด้วย 1, 2 และ 8.

นี่เป็นอีกตัวอย่างหนึ่ง ชุดอักขระ [a-dz] รวมอักขระจากช่วง โฆษณาเหล่านี้คือ , , , และตัวละคร ซี.

ภายในการทดสอบตามเงื่อนไขของ Bash [[, เมื่อ =~ มีการใช้ตัวดำเนินการ สตริงทางด้านขวาของตัวดำเนินการจะจับคู่เป็นนิพจน์ทั่วไป

Score:2
ธง in

ดูเหมือนว่าคุณต้องการใช้ Bash's เลือก สร้างขึ้นใน:

เลือก code_id ใน {A..Z}; ทำ
    [[ -z $code_id ]] || หยุดพัก
เสร็จแล้ว
echo "INFO: รหัสคือ ${code_id}"

เอาท์พุต:

1) A 3) C 5) E 7) G 9) I 11) K 13) M 15) O 17) Q 19) S 21) U 23) W 25) Y
2) B 4) D 6) F 8) H 10) J 12) L 14) N 16) P 18) R 20) T 22) V 24) X 26) Z
#? 6
ข้อมูล: รหัสคือ F.

คุณอาจต้องการจำกัด คอลัมน์ เช่น.:

คอลัมน์=1
เลือก code_id ใน {A..Z}; ทำ
    [[ -z $code_id ]] || หยุดพัก
เสร็จแล้ว
echo "INFO: รหัสคือ ${code_id}"

เอาท์พุต:

 1) ก
 2) บี
 3) ค
 4) ง
 5) อี
 6) ฉ
 7) ช
 8) ฮ
 9) ฉัน
10) เจ
11) เค
12) ล
13) ม
14) น
15) อ
16) ป
17) ถาม
18) ร
19) ส
20) ต
21) ยู
22) ว
23) ว
24) เอ็กซ์
25) ย
26) ซ
#? 17
ข้อมูล: รหัสคือ Q.
Score:0
ธง in

วิธีแก้ไขคือเปลี่ยนเงื่อนไขเป็น ในขณะที่ [[ $rep_id -le 0 || $rep_id -ge 13 ]]; ทำ...

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา