La sintaxis
delete array
no está en las versiones actuales en POSIX, pero es compatible con prácticamente todas las implementaciones existentes (incluidas las awk, GNU, mawk y BusyBox originales). Se agregará en una versión futura de POSIX (consulte el defecto 0000544 ).
Una forma alternativa de borrar todos los elementos de la matriz, que es portátil y compatible con el estándar, y que es una expresión en lugar de una declaración, es confiar en split
eliminar todos los elementos existentes:
split("", array, ":")
Todos estos, incluidos delete array
, dejan la variable marcada como una variable de matriz en el awk original, en GNU awk y en mawk (pero no en BusyBox awk). Hasta donde sé, una vez que una variable se ha utilizado como una matriz, no hay forma de usarla como una variable escalar.
delete array
un error de sintaxis, aunque la página del manual dice que el subíndice es 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 ... >>
Fue más sorprendente encontrar quedelete array[subscript]
, si bien no se muestra como un error, tampoco funcionó, y muchas variantes enarray[subscript] = ""
fueron igualmente ineficaces.