Cú pháp
delete array
không có trong các phiên bản hiện tại trong POSIX, nhưng nó được hỗ trợ bởi hầu như tất cả các triển khai hiện có (bao gồm awk ban đầu, GNU, mawk và BusyBox). Nó sẽ được thêm vào trong phiên bản tương lai của POSIX (xem lỗi 0000544 ).
Một cách khác để xóa tất cả các thành phần mảng, cả di động và tuân thủ tiêu chuẩn, và đó là một biểu thức chứ không phải là một tuyên bố, là dựa vào việc split
xóa tất cả các thành phần hiện có:
split("", array, ":")
Tất cả những thứ này, bao gồm delete array
, để lại biến được đánh dấu là biến mảng trong awk gốc, trong GNU awk và mawk (nhưng không phải trong BusyBox awk). Theo tôi biết, một khi một biến đã được sử dụng như một mảng, không có cách nào để sử dụng nó như một biến vô hướng.
delete array
một lỗi cú pháp mặc dù trang man nói rằng chỉ mục là không bắt buộc.$ 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 ... >>
Điều đáng ngạc nhiên hơn là phát hiện ra rằngdelete array[subscript]
, mặc dù không hiển thị là lỗi, nhưng cũng không hoạt động và nhiều biến thể trênarray[subscript] = ""
đều không hiệu quả như nhau.