เมื่อก่อน / หลังการเพิ่มตัวแปรใน POSIX Shell ความแตกต่างระหว่างสองตัวอย่างนี้คืออะไร พวกเขาดูเหมือนว่าพวกเขาจะมีผลที่เหมือนกัน แต่พวกเขาจะใช้แตกต่างกันอย่างไร เมื่อไหร่ที่คุณจะชอบอีกอันหนึ่ง?
X=$((X+1))
: $((X=X+1))
เมื่อก่อน / หลังการเพิ่มตัวแปรใน POSIX Shell ความแตกต่างระหว่างสองตัวอย่างนี้คืออะไร พวกเขาดูเหมือนว่าพวกเขาจะมีผลที่เหมือนกัน แต่พวกเขาจะใช้แตกต่างกันอย่างไร เมื่อไหร่ที่คุณจะชอบอีกอันหนึ่ง?
X=$((X+1))
: $((X=X+1))
คำตอบ:
ในตัวอย่างแรกของคุณ$((X+1))
ประเมินค่านิพจน์ X + 1 และขยายไปสู่ผลลัพธ์ซึ่งจะถูกกำหนดให้กับตัวแปร
ในตัวอย่างที่สอง$((X=X+1))
เพิ่มขึ้นX
โดยหนึ่ง ( $((X++))
ยังเป็นที่ถูกต้องและสั้น แต่ไม่ได้รับการสนับสนุนโดยจำเป็นต้องเปลือก) จากนั้นจะขยายมูลค่าใหม่ซึ่งเป็นคนแรกที่จะโต้แย้งคำสั่งโมฆะ,$X
:
คำสั่ง null ละเว้นการขัดแย้งและผลลัพธ์จะถูกทิ้ง (พร้อมกับผลข้างเคียง)
ฉันเองชอบแบบฟอร์มแรกเนื่องจากเหตุผลสามประการ (ค่อนข้างเป็นส่วนตัว):
คุณต้องใช้เวอร์ชันแรกหากคุณแก้ไขสภาพแวดล้อมของคำสั่งเดียวเช่น
X=$((X+1)) /usr/local/bin/something
คุณจะต้องใช้แบบฟอร์มที่สองเพื่อเพิ่มการประเมินผลการขัดแย้งโดยตรง:
ls -la "file-$((X++))" # or ...
ls -la "file-$((X=X+1))" # for better compatibility
นี่คือผลข้างเคียงที่ต้องการบันทึกหนึ่งบรรทัดและค่อนข้างชัดเจน