unset
ลบองค์ประกอบ มันไม่เปลี่ยนเลของค์ประกอบที่เหลือ
เราสามารถใช้declare -p
เพื่อดูว่าเกิดอะไรขึ้นกับnumbers
:
$ unset "numbers[i]"
$ declare -p numbers
declare -a numbers=([0]="53" [1]="8" [2]="12" [3]="9" [5]="69" [6]="8" [7]="7" [8]="1")
สังเกตไม่ได้มีองค์ประกอบnumbers
4
ตัวอย่างอื่น
สังเกต:
$ a=()
$ a[1]="element 1"
$ a[22]="element 22"
$ declare -p a
declare -a a=([1]="element 1" [22]="element 22")
Array a
ไม่มีองค์ประกอบ 2 ถึง 21 Bash ไม่ต้องการให้ดัชนีอาร์เรย์เรียงติดกัน
วิธีที่แนะนำในการบังคับให้ทำการจัดลำดับดัชนีใหม่
เริ่มต้นด้วยnumbers
อาร์เรย์ด้วยองค์ประกอบที่ขาดหายไป4
:
$ declare -p numbers
declare -a numbers=([0]="53" [1]="8" [2]="12" [3]="9" [5]="69" [6]="8" [7]="7" [8]="1")
หากเราต้องการให้ดัชนีมีการเปลี่ยนแปลงให้ทำดังนี้:
$ numbers=("${numbers[@]}")
$ declare -p numbers
declare -a numbers=([0]="53" [1]="8" [2]="12" [3]="9" [4]="69" [5]="8" [6]="7" [7]="1")
ขณะนี้มีจำนวนองค์ประกอบและมันมีค่า4
69
วิธีอื่นในการลบองค์ประกอบ & เปลี่ยนลำดับหมายเลขในขั้นตอนเดียว
อีกครั้งให้คำจำกัดความnumbers
:
$ numbers=(53 8 12 9 784 69 8 7 1)
ตามที่Toby Speight แนะนำในความคิดเห็นวิธีการลบองค์ประกอบที่สี่และกำหนดหมายเลของค์ประกอบที่เหลือทั้งหมดใหม่ในขั้นตอนเดียว:
$ numbers=("${numbers[@]:0:4}" "${numbers[@]:5}")
$ declare -p numbers
declare -a numbers=([0]="53" [1]="8" [2]="12" [3]="9" [4]="69" [5]="8" [6]="7" [7]="1")
อย่างที่คุณเห็นองค์ประกอบที่สี่ถูกลบและองค์ประกอบที่เหลือทั้งหมดถูกจัดลำดับใหม่
${numbers[@]:0:4}
อาร์เรย์ slices numbers
: ใช้องค์ประกอบสี่รายการแรกที่เริ่มต้นด้วยองค์ประกอบ 0
ในทำนองเดียวกัน${numbers[@]:5}
array slice numbers
: จะใช้องค์ประกอบทั้งหมดที่เริ่มต้นด้วยองค์ประกอบที่ 5 และดำเนินการต่อจนถึงจุดสิ้นสุดของอาร์เรย์
การรับดัชนีของอาร์เรย์
ค่า${a[@]}
ของอาร์เรย์สามารถรับกับ เพื่อหาดัชนี (หรือปุ่ม ) ${!a[@]}
ที่สอดคล้องกับค่าเหล่านั้นใช้
ตัวอย่างเช่นลองพิจารณาอาร์เรย์ของเราอีกครั้งnumbers
ด้วยองค์ประกอบที่ขาดหายไป4
:
$ declare -p numbers
declare -a numbers=([0]="53" [1]="8" [2]="12" [3]="9" [5]="69" [6]="8" [7]="7" [8]="1")
หากต้องการดูดัชนีที่ได้รับมอบหมาย:
$ echo "${!numbers[@]}"
0 1 2 3 5 6 7 8
อีกครั้ง4
หายไปจากรายการดัชนี
เอกสาร
จากman bash
:
unset
builtin จะใช้ในการทำลายอาร์เรย์ ทำลายองค์ประกอบอาร์เรย์ที่ดัชนีunset name[subscript]
subscript
ตัวห้อยเชิงลบไปยังอาร์เรย์ที่จัดทำดัชนีจะถูกตีความตามที่อธิบายไว้ข้างต้น ต้องใช้ความระมัดระวังเพื่อหลีกเลี่ยงผลข้างเคียงที่ไม่พึงประสงค์ที่เกิดจากการขยายชื่อพา ธ unset name
ที่name
เป็นอาร์เรย์หรือunset name[subscript]
ที่subscript
เป็น *
หรือ @
เอาอาร์เรย์ทั้งหมด