awk에서 루프로 배열을 지우면 빈 배열이됩니다. 이는 배열을 삭제하는 것과 같습니다.
for (key in array) delete array[key];
더 간단한 방법이 있습니까? 변수 이름을 스칼라에 재사용 할 수 있도록 배열을 완전히 삭제할 수 있습니까?
awk에서 루프로 배열을 지우면 빈 배열이됩니다. 이는 배열을 삭제하는 것과 같습니다.
for (key in array) delete array[key];
더 간단한 방법이 있습니까? 변수 이름을 스칼라에 재사용 할 수 있도록 배열을 완전히 삭제할 수 있습니까?
답변:
문법
delete array
POSIX의 현재 버전은 아니지만 거의 모든 기존 구현 (원래 awk, GNU, mawk 및 BusyBox 포함)에서 지원됩니다. POSIX의 향후 버전에 추가 될 예정입니다 ( 결함 0000544 참조 ).
이식 가능하고 표준을 준수하며 명령문이 아닌 표현식 인 모든 배열 요소를 지우는 다른 방법은 split
기존 요소를 모두 삭제하는 것입니다.
split("", array, ":")
를 포함하여 이러한 모든 delete array
변수는 변수를 원래 awk, GNU awk 및 mawk (BusyBox awk가 아닌)의 배열 변수로 표시합니다. 내가 아는 한 변수가 배열로 사용되면 스칼라 변수로 사용할 방법이 없습니다.
split("", array)
delete array
매뉴얼 페이지에 아래 첨자가 선택적이지만 SCO Openserver 5.0.7 awk가 구문 오류를 호출한다는 사실은 놀랍습니다 . 오류로 표시되지는 않았지만 작동하지 않았으며 여러 변형 이 모두 동일하게 효과 가 없다는$ 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] = ""