A sintaxe
delete array
não está nas versões atuais do POSIX, mas é suportado por praticamente todas as implementações existentes (incluindo o awk original, GNU, mawk e BusyBox). Ele será adicionado em uma versão futura do POSIX (consulte o defeito 0000544 ).
Uma maneira alternativa de limpar todos os elementos da matriz, que são portáteis e compatíveis com os padrões, e que é uma expressão e não uma declaração, é confiar na split
exclusão de todos os elementos existentes:
split("", array, ":")
Tudo isso, inclusive delete array
, deixa a variável marcada como sendo uma variável de matriz no awk original, no GNU awk e no mawk (mas não no BusyBox awk). Até onde eu sei, uma vez que uma variável tenha sido usada como uma matriz, não há como usá-la como uma variável escalar.
delete array
um erro de sintaxe, embora a página de manual diga que o subscrito é opcional.$ 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 ... >>
Foi mais surpreendente descobrir quedelete array[subscript]
, embora não tenha sido mostrado como um erro, também não funcionou, e muitas variantesarray[subscript] = ""
foram todas igualmente ineficazes.