อัฒภาคในโครงสร้างที่มีเงื่อนไข


34

ทำไมใส่เครื่องหมายอัฒภาคไว้ในที่หนึ่งและไม่ใช่อีกอัน?

ผลลัพธ์จะเหมือนกัน

รหัสหนึ่ง

if [ "a" == "a" ]
then
 echo "true"
fi

รหัสสอง

if [ "a" == "a" ];
then
 echo "true";
fi

อัฒภาคในโค้ดที่สองนั้นไม่จำเป็นเลยเหรอ?

เมื่อจำเป็นต้องใส่เครื่องหมายอัฒภาคหรือไม่


2
นี่เป็นคำตอบที่เพียงพอและเหมาะสม แต่ฉันต้องการให้ OP ทราบเช่นกัน เพียงแทนที่ใด ๆ ที่ปลายของสายเพื่อให้คุณสามารถรวมสองคำสั่งลงในหนึ่งบรรทัดเช่น:svn up; make
แอรอน D. Marasco

1
โปรดทราบว่ามีการใช้สองเซมิโคลอนสองตัว;;เพื่อแยกการจับคู่ในคำสั่ง case ;;จำเป็นต้องมีที่นี่ไม่ใช่ตัวเลือก .... แต่;;ไม่ใช่สิ่งเดียวกันกับ;หรือ; ;เพียงดูเหมือนเล็กน้อย เซมิโคลอนเดี่ยว;ทำงานตามปกติในส่วนคำสั่งของคำสั่ง case
cas

คำตอบ:


30

อัฒภาคจำเป็นเฉพาะเมื่อไม่มีจุดสิ้นสุดของบรรทัด:

if [ "a" == "a" ] ; then echo "true" ; fi

หากไม่มีเครื่องหมายอัฒภาคคุณจะได้รับข้อผิดพลาดทางไวยากรณ์

ฉันไม่เข้าใจคำถามของคุณเกี่ยวกับคำพูด คุณจะเจาะจงมากขึ้นได้ไหม?

(และโดยวิธีการใช้=แทน==เป็นแบบพกพามากขึ้นและเป็นไปตาม POSIX)


คำพูดในรหัสที่สองนั้นไม่จำเป็นเหรอ?
Jhonathan

2
คำพูดทั้งหมดในตัวอย่างทั้งสองนั้นไม่จำเป็น
choroba

6

ใช้เครื่องหมายอัฒภาคเนื่องจากบางคน (/ ฉันเช่น) ชอบสไตล์เช่นนี้:

if [ ... ]; then
   doit-it-then
else
   doit-it-else
fi

ดังนั้นหากคำหลักนั้นถูกวางไว้บนเงื่อนไขบรรทัดก็เป็นสิ่งจำเป็นเพราะคำสั่งใหม่จะเริ่มขึ้นตามที่เขียนโดย choroba

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

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