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
構文エラーを呼び出すのを発見したのは驚きでしたが、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] = ""
がすべて同様に無効であることがわかりました。