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