ฉันมีปัญหากับหนึ่งในสคริปต์เชลล์ของฉัน ถามเพื่อนร่วมงานไม่กี่คน แต่พวกเขาทั้งหมดเพิ่งส่ายหัว (หลังจากมีรอยขีดข่วน) ดังนั้นฉันจึงมาที่นี่เพื่อหาคำตอบ
ตามความเข้าใจของฉันเชลล์สคริปต์ต่อไปนี้ควรพิมพ์ "Count is 5" เป็นบรรทัดสุดท้าย ยกเว้นว่ามันจะไม่ มันพิมพ์ "นับเป็น 0" หาก "ขณะที่อ่าน" ถูกแทนที่ด้วยลูปชนิดอื่นมันก็ใช้ได้ดี นี่คือสคริปต์:
echo "1"> input.data echo "2" >> input.data echo "3" >> input.data echo "4" >> input.data echo "5" >> input.data CNT = 0 cat input.data | ในขณะที่อ่าน ทำ ให้ CNT ++; echo "นับเป็น $ CNT" เสร็จแล้ว echo "นับเป็น $ CNT"
เหตุใดสิ่งนี้จึงเกิดขึ้นและฉันจะป้องกันได้อย่างไร ฉันได้ลองสิ่งนี้ใน Debian Lenny และ Squeeze แล้วผลลัพธ์เดียวกัน (เช่น bash 3.2.39 และ bash 4.1.5 ฉันยอมรับอย่างเต็มที่ว่าไม่ได้เป็นตัวช่วยสร้างสคริปต์ของเชลล์