Ich denke, es sollte klar sein, dass wir uns an dieser Stelle im implementierungsabhaengigen Raum abseits von POSIX befinden. Insofern sind die unterschiedlichen Verhalten nicht ueberraschend.
Generell muss man die zwei verschiedenen Arten von Quotes in awk unterscheiden. Es gibt Strings, die in Double-Quotes eingefasst sind, und es gibt REs, die in Slashes eingefasst sind. Man sieht das beispielswiese wenn man substituiert:
Allerdings kann man REs auch als Strings uebergeben. Dennoch werden die unterschiedlichen Quotes unterschiedlich behandelt. Daher kommt der Unterschied zwischen RS="..." und RS=/.../.
Was von POSIX definiert ist, ist dieser Fall: RS="" -- Weist man einen leeren *String* zu, dann separiert awk an Leerzeilen (und der FS ist Newline). Das ist in der Manpage auch beschrieben.
Was passiert, wenn man RS eine RE zuweist, habe ich bisher noch nirgends beschrieben gesehen. Vielleicht muesste man dazu mal in den Code von gawk graben (oder in meinen Buechern stoebern). Was ich reverse-engineere ist, dass dann gawk ueberhaupt nicht separiert, sondern alles in einen Record packt.
Was ich oben zu der nicht matchenden RE geschrieben habe, ist irrelevant. Ich habe festgestellt, dass es (bei gawk) egal ist, was man reinschreibt. Also immer wenn man Slashes verwendet beim Zuweisen von RS, dann wird der ganze Input ein Record.
Laut POSIX kann anscheinend nur ein einziges Zeichen als RS verwendet werden. Gawk verhaelt sich hier abweichend, indem es den an RS zugewiesenen *String* als RE interpretiert.
... alles in allem ein spannendes Thema. Leider habe ich morgen wenig Zeit, aber vielleicht kann ich am Wochenende nochmal tiefer graben.
