นี่เป็นข้อบกพร่องหรือคุณสมบัติหรือไม่?
มันดูเหมือนว่าจะเกิดขึ้นสำหรับunquoted Alphanumerics
ใช้ GNU bash เวอร์ชั่น 4.1.5
for alpha01234; do echo $((++i)); done
เอาท์พุท:
1
2
3
4
นี่เป็นข้อบกพร่องหรือคุณสมบัติหรือไม่?
มันดูเหมือนว่าจะเกิดขึ้นสำหรับunquoted Alphanumerics
ใช้ GNU bash เวอร์ชั่น 4.1.5
for alpha01234; do echo $((++i)); done
เอาท์พุท:
1
2
3
4
คำตอบ:
นั่นคือคุณสมบัติของforคำสั่งผสมดังอธิบายโดยhelp for:
for: for NAME [in WORDS ... ] ; do COMMANDS; doneดำเนินการคำสั่งสำหรับสมาชิกแต่ละคนในรายการ
การ
forวนรอบดำเนินการลำดับของคำสั่งสำหรับสมาชิกแต่ละคนในรายการของรายการ หากin WORDS ...;ไม่มีอยู่ก็in "$@"จะถือว่า สำหรับแต่ละองค์ประกอบในWORDS,NAMEถูกตั้งค่าเป็นองค์ประกอบที่และCOMMANDSจะดำเนินการ
ดังนั้นรหัสที่คุณยกมาน่าจะถูกเรียกใช้งานในสคริปต์ซึ่งถูกเรียกด้วยพารามิเตอร์ 4 ตัว
for x; do …เป็นทางลัดสำหรับfor x in "$@"; do …: มันวนซ้ำพารามิเตอร์ตำแหน่ง หากลูปสี่ครั้งหมายความว่าคุณมีพารามิเตอร์ตำแหน่งสี่ค่า ( $1ผ่าน$4)
set a b c dในบางครั้งเมื่อเร็ว ๆ นี้ ฉันมักจะใช้setวิธีนั้นในสคริปต์สำหรับการทดสอบ .. หลังจากรีสตาร์ทเทอร์มินัลมันหยุด ... (เข้าท่าตอนนี้) ..