|
From: | Ed Morton |
Subject: | Awk output redirection to expression - defined or not? |
Date: | Thu, 25 May 2023 08:37:57 -0500 |
User-agent: | Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 |
* SUSV2 - https://pubs.opengroup.org/onlinepubs/7990989775/xcu/awk.html * SUSV3 - https://pubs.opengroup.org/onlinepubs/009695399/utilities/awk.html * Current POSIX spec - https://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.html or by googling.What I do see in the current POSIX spec is a related statement just about input redirection:
Historical practice has been that: getline < "a" "b" is parsed as: ( getline < "a" ) "b"although many would argue that the intent was that the file *ab* should be read. However:getline < "x" + 1 parses as: getline < ( "x" + 1 ) ...Since in most cases such constructs are not (or at least should not) be used (because they have a natural ambiguity for which there is no conventional parsing), the meaning of these constructs has been made explicitly unspecified.
and:
The *getline* operator can form ambiguous constructs when there are unparenthesized binary operators (including concatenate) to the right of the '<' (up to the end of the expression containing the *getline*). The result of evaluating such a construct is unspecified
but nothing about output redirection. I know gawk doesn't require parens around the expression for output redirection but other awks do (e.g. see https://stackoverflow.com/q/21093626/1745001) and it's not obvious to me why `getline < "a" "b"` should be undefined behavior while `print > "a" "b"` wouldn't be so intuitively if one of them is undefined then so should the other be.
Does anyone else recall seeing a statement about output redirection to an expression requiring parens and, if so, do you recall where it existed?
Ed.
[Prev in Thread] | Current Thread | [Next in Thread] |