Синтаксис
delete array
не існує в поточних версіях POSIX, але він підтримується практично всіма існуючими реалізаціями (включаючи оригінальний awk, GNU, mawk та BusyBox). Він буде доданий у майбутній версії POSIX (див. Дефект 0000544 ).
Альтернативний спосіб очищення всіх елементів масиву, який є і портативним, і сумісним зі стандартами, і який є виразом, а не твердженням, - покладатися на split
видалення всіх існуючих елементів:
split("", array, ":")
Усі вони, в тому числі delete array
, залишають змінну позначеною як змінну масиву в початковому awk, в GNU awk та в mawk (але не в BusyBox awk). Наскільки мені відомо, як тільки змінна використовується як масив, немає ніякого способу використовувати її як скалярну змінну.
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] = ""
були однаково неефективними.