การรวมอาร์เรย์ใน POSIX จะทำให้มาตรฐาน POSIX พังหรือไม่

Aug 16 2020

ความสามารถในการใช้อาร์เรย์ใน bash และ ksh93 นั้นสะดวกมากเมื่อจำเป็นต้องเข้าถึงองค์ประกอบอย่างรวดเร็วจากหลายอาร์เรย์ นี่คือตัวอย่างสั้น ๆ :

#!/bin/ksh93 --

array1=(1 2 3 4 5 6 7)

array2=(8 9 10 11 12 13 14)

printf '%s\n' "Third element of array1 is ${array1[2]} and fifth element of array2 is ${array2[4]}"

ฉันจำได้ว่าอ่านผ่านมาว่าอย่างน้อยส่วนหนึ่งของเหตุผลที่อาร์เรย์ไม่รวมอยู่ในมาตรฐาน POSIX คือการทำเช่นนั้นจะทำลายสิ่งต่างๆ นี่คือเรื่องจริง? อะไรจะพัง?

คำตอบ

2 bk2204 Aug 18 2020 at 08:39

ฉันไม่รู้ว่าคุณกำลังอ้างถึงข้อความอะไร แต่ฉันค่อนข้างแน่ใจว่านี่ไม่ใช่ในกรณีนี้เนื่องจากbashและksh93ควรจะเป็นไปตาม POSIX และหากอาร์เรย์ทำให้เชลล์ POSIX แตกเชลล์เหล่านั้นจะไม่เป็นไปตามนั้น .

อย่างไรก็ตามนั่นไม่ได้หมายความว่า POSIX มีแนวโน้มที่จะรวมไว้ด้วย ประการแรกbashและksh93ไม่สามารถใช้อาร์เรย์ในลักษณะเดียวกันและ POSIX ไม่ต้องการระบุคุณลักษณะที่ทำงานแตกต่างกันในการนำไปใช้ในอดีตที่ปรับใช้อย่างกว้างขวาง

ประการที่สอง POSIX โดยทั่วไปไม่ได้ระบุคุณสมบัติมากมาย เพียง แต่ตอนนี้คือแม้จะมีข้อเสนอที่จะต้องใช้localซึ่งมีการใช้งานกันอย่างแพร่หลายในเกือบทุกแหล่งที่มาเปิดเปลือก POSIX ksh93ยกเว้น ในทำนองเดียวกันอาจเป็นไปได้ที่จะใช้การviใช้งานที่ใช้เฉพาะคุณสมบัติ POSIX แต่ผู้ใช้ส่วนใหญ่จะพบว่าคุณลักษณะนี้ค่อนข้างเบาบาง

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

โปรดทราบด้วยว่าเพียงเพราะการนำโอเพนซอร์สมาใช้อย่างแพร่หลายมีคุณลักษณะไม่ได้หมายความว่าสภาพแวดล้อม Unix เชิงพาณิชย์ แม้ว่า POSIX จะระบุอาร์เรย์ในเวอร์ชันใหม่ แต่ก็ต้องใช้เวลาหลายปีก่อนที่ระบบทั้งหมดจะได้รับการอัปเดตเพื่อรองรับ