Score:0

การใช้ตัวแปรในการวนรอบ bash

ธง bd

ฉันแค่สงสัยว่ามันเป็นไปได้ที่จะใช้ตัวแปรในการวนซ้ำหรือไม่? ฉันเหนื่อย:

สำหรับตัวเลขใน { eval echo {0..$1}}
ทำ 
    เสียงสะท้อน 5
เสร็จแล้ว

ฉันตั้งใจให้มันพิมพ์ออกมา 5 ครั้งตามจำนวนครั้งที่ฉันป้อนในพรอมต์ อย่างไรก็ตาม มันทำตัวแปลกๆ ถ้าฉันป้อนใน:

./test.sh 2

ควรพิมพ์ 5 สองครั้ง แต่พิมพ์ 5 ออกมาสี่ครั้ง ใครสามารถช่วยฉันได้บ้าง และทำไมมันถึงพิมพ์ออกมา 4 ครั้งแทนที่จะเป็น 2 ??

แก้ไข: ส่วนใหญ่

สำหรับตัวเลขใน $(seq "$2")

ใช้งานได้ แต่ถ้าฉันลองคำนวณมันจะทำลายรหัสของฉัน:

เวลา=1
รวม=5
สำหรับตัวเลขใน $(seq "$2")
ทำ
    echo "$time + $total" | พ.ศ
เสร็จแล้ว

ให้: seq: อาร์กิวเมนต์ทศนิยมไม่ถูกต้อง: ââ ลอง 'seq --help' สำหรับข้อมูลเพิ่มเติม ใครช่วยบอกวิธีแก้ไขหน่อยค่ะ??

cc flag
ใช้ backtics (`) แทนด้านนอก { } และลูปของคุณควรใช้งานได้ แต่เริ่มที่ 1 แทน 0 สำหรับสองครั้งที่คุณคาดไว้ผ่านลูป
hr flag
หากคุณใช้ `seq "$2"` คุณต้องระบุพารามิเตอร์ตำแหน่งที่ 2 ที่เป็นตัวเลขเมื่อคุณเรียกสคริปต์ เช่น `./test.sh ฟู 2`
Score:2
ธง hr

มันพิมพ์ออกมา 5 สี่ครั้งเพราะว่า { eval เสียงสะท้อน {0..2}} ผลลัพธ์ในสี่โทเค็นที่คั่นด้วยช่องว่าง {, 0, 1 และ 2}

หากคุณต้องการใช้ $1 เมื่อสิ้นสุดการแสดงออกของช่วงใน bash ควรใช้ภายนอก รองลงมา สั่งการ:

สำหรับตัวเลขใน $(seq "$1")

หรือใช้สไตล์ C สำหรับ ห่วง

สำหรับ ((number=0; number<"$1"; number++))
Yunfei Chen avatar
bd flag
มันใช้งานได้ แต่ถ้าฉันใช้ตัวแปรภายใน for loop มันจะหยุดทันที
Yunfei Chen avatar
bd flag
เวลา=1 รวม = 5 สำหรับตัวเลขใน $(seq "$2") ทำ echo "$time + $total" | พ.ศ เสร็จแล้ว
hr flag
@YunfeiChen ล้มเหลวยังไงกันแน่? คุณเรียกสคริปต์ว่าอย่างไร โดยเฉพาะอย่างยิ่ง คุณระบุพารามิเตอร์ตำแหน่งกี่ตัว (เนื่องจากคุณเปลี่ยน "$1" เป็น "$2")
Yunfei Chen avatar
bd flag
ให้ฉัน: (standard_in) 1: ข้อผิดพลาดทางไวยากรณ์ (standard_in) 1: อักขระที่ผิดกฎหมาย: : (standard_in) 1: ข้อผิดพลาดทางไวยากรณ์ (standard_in) 1: ข้อผิดพลาดทางไวยากรณ์ (standard_in) 1: ข้อผิดพลาดทางไวยากรณ์ (standard_in) 2: ข้อผิดพลาดทางไวยากรณ์ (standard_in) 2: อักขระที่ผิดกฎหมาย: : (standard_in) 2: ข้อผิดพลาดทางไวยากรณ์ (standard_in) 2: ข้อผิดพลาดทางไวยากรณ์ (standard_in) 2: ข้อผิดพลาดทางไวยากรณ์
hr flag
ความคิดเห็นของ @YunfeiChen ไม่ใช่ที่ที่เหมาะสมสำหรับคำถามที่ตามมา โดยเฉพาะอย่างยิ่ง การจัดรูปแบบไม่อนุญาตให้ฉันเห็นสิ่งที่คุณกำลังพิมพ์ หาก "อักขระที่ผิดกฎหมาย" คือ `^M` นั่นเป็นเพราะสคริปต์ของคุณมีการลงท้ายบรรทัดของ Windows

โพสต์คำตอบ

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