ใน awk ฉันสามารถล้างอาเรย์ด้วยลูปทำให้เป็นอาเรย์ที่ว่างเปล่าซึ่งเทียบเท่ากับการลบมัน
for (key in array) delete array[key];
มีวิธีที่ง่ายกว่านี้ไหม? ฉันสามารถลบอาร์เรย์ทั้งหมดเพื่อให้สามารถใช้ชื่อตัวแปรสำหรับสเกลาร์ได้หรือไม่
ใน awk ฉันสามารถล้างอาเรย์ด้วยลูปทำให้เป็นอาเรย์ที่ว่างเปล่าซึ่งเทียบเท่ากับการลบมัน
for (key in array) delete array[key];
มีวิธีที่ง่ายกว่านี้ไหม? ฉันสามารถลบอาร์เรย์ทั้งหมดเพื่อให้สามารถใช้ชื่อตัวแปรสำหรับสเกลาร์ได้หรือไม่
คำตอบ:
ไวยากรณ์
delete array
ไม่ได้อยู่ในเวอร์ชันปัจจุบันใน POSIX แต่ได้รับการสนับสนุนโดยการใช้งานที่มีอยู่ทั้งหมด (รวมถึง awk, GNU, mawk และ BusyBox ดั้งเดิม) มันจะถูกเพิ่มในรุ่นอนาคตของ POSIX (ดูข้อบกพร่อง 0000544 )
วิธีอื่นในการล้างองค์ประกอบอาร์เรย์ทั้งหมดซึ่งเป็นทั้งแบบพกพาและได้มาตรฐานและซึ่งเป็นนิพจน์แทนที่จะเป็นคำสั่งคือการพึ่งพาการsplit
ลบองค์ประกอบที่มีอยู่ทั้งหมด:
split("", array, ":")
สิ่งเหล่านี้รวมถึงdelete array
ปล่อยตัวแปรที่ทำเครื่องหมายว่าเป็นตัวแปรอาร์เรย์ใน awk ดั้งเดิมใน GNU awk และใน mawk (แต่ไม่ใช่ใน BusyBox awk) เท่าที่ฉันรู้เมื่อตัวแปรถูกใช้เป็นอาร์เรย์จะไม่มีวิธีใช้เป็นตัวแปรสเกลาร์
split("", array)
delete array
ข้อผิดพลาดทางไวยากรณ์แม้ว่าหน้า man จะบอกว่าตัวห้อยนั้นเป็นตัวเลือก$ awk 'BEGIN { A[1] = 0; delete A; }' awk: Syntax error at line 1 of program << BEGIN { A[1] = 0; de ... >> context is BEGIN { A[1] = 0; delete >>> A; <<< awk: illegal statement at line 1 of program << BEGIN { A[1] = 0; de ... >>
มันน่าแปลกใจมากที่พบว่าdelete array[subscript]
ในขณะที่ไม่ได้แสดงให้เห็นว่าเป็นข้อผิดพลาดก็ไม่ได้ผลและหลายสายพันธุ์array[subscript] = ""
ก็ไม่ได้ผลเท่ากัน