* 5.3: printf - @ 2016-12-12 23:41 Daniel Shahaf 2016-12-13 4:21 ` Bart Schaefer 0 siblings, 1 reply; 12+ messages in thread From: Daniel Shahaf @ 2016-12-12 23:41 UTC (permalink / raw) To: zsh-workers % printf - printf: not enough arguments Happens in sh mode too. dash and bash [that's what I have handy] print a minus sign. Reported on IRC. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: 5.3: printf - 2016-12-12 23:41 5.3: printf - Daniel Shahaf @ 2016-12-13 4:21 ` Bart Schaefer 2016-12-13 6:25 ` Daniel Shahaf 2016-12-14 4:48 ` PATCH " Bart Schaefer 0 siblings, 2 replies; 12+ messages in thread From: Bart Schaefer @ 2016-12-13 4:21 UTC (permalink / raw) To: zsh-workers On Dec 12, 11:41pm, Daniel Shahaf wrote: } } % printf - } printf: not enough arguments } } Happens in sh mode too. dash and bash [that's what I have handy] print } a minus sign. I was going to blame this on zsh generally treating a single "-" like "--" in argument lists (which is documented), but something is fishy: torch% printf -- -- printf: not enough arguments torch% printf - - -% torch% printf - -- printf: not enough arguments torch% printf -- - -% torch% printf -- -- -- --% ("%" there is PROMPT_SP of course). ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: 5.3: printf - 2016-12-13 4:21 ` Bart Schaefer @ 2016-12-13 6:25 ` Daniel Shahaf 2016-12-14 4:48 ` PATCH " Bart Schaefer 1 sibling, 0 replies; 12+ messages in thread From: Daniel Shahaf @ 2016-12-13 6:25 UTC (permalink / raw) To: zsh-workers Bart Schaefer wrote on Mon, Dec 12, 2016 at 20:21:10 -0800: > On Dec 12, 11:41pm, Daniel Shahaf wrote: > } > } % printf - > } printf: not enough arguments > } > } Happens in sh mode too. dash and bash [that's what I have handy] print > } a minus sign. > > I was going to blame this on zsh generally treating a single "-" like > "--" in argument lists (which is documented), but something is fishy: > > torch% printf -- -- > printf: not enough arguments > torch% printf - - > -% > torch% printf - -- > printf: not enough arguments > torch% printf -- - > -% > torch% printf -- -- -- > --% I think these should: • In sh mode, emit argv[1] and ignore the others: it is the format string even if it happens to start with a minus. • In zsh mode, interpret argv[1] as end-of-options, then emit argv[2] and ignore any other arguments: argv[2] is the format string. Another case: «printf -x». > ("%" there is PROMPT_SP of course). > ^ permalink raw reply [flat|nested] 12+ messages in thread
* PATCH Re: 5.3: printf - 2016-12-13 4:21 ` Bart Schaefer 2016-12-13 6:25 ` Daniel Shahaf @ 2016-12-14 4:48 ` Bart Schaefer 2016-12-14 9:39 ` Peter Stephenson 1 sibling, 1 reply; 12+ messages in thread From: Bart Schaefer @ 2016-12-14 4:48 UTC (permalink / raw) To: zsh-workers Apparently this was introduced in 37467 when I changed "printf" from having no options at all to having the -v option for print-to-variable. There's some documentation saying that ideally we would not create any new builtins with BINF_SKIPINVALID but I don't see any other way to get back the old behavior. diff --git a/Src/builtin.c b/Src/builtin.c index 65e0cb1..0f04d14 100644 --- a/Src/builtin.c +++ b/Src/builtin.c @@ -100,7 +100,7 @@ static struct builtin builtins[] = BUILTIN("popd", BINF_SKIPINVALID | BINF_SKIPDASH | BINF_DASHDASHVALID, bin_cd, 0, 1, BIN_POPD, "q", NULL), BUILTIN("print", BINF_PRINTOPTS, bin_print, 0, -1, BIN_PRINT, "abcC:Df:ilmnNoOpPrRsSu:v:x:X:z-", NULL), - BUILTIN("printf", 0, bin_print, 1, -1, BIN_PRINTF, "v:", NULL), + BUILTIN("printf", BINF_SKIPINVALID | BINF_SKIPDASH, bin_print, 1, -1, BIN_PRINTF, "v:", NULL), BUILTIN("pushd", BINF_SKIPINVALID | BINF_SKIPDASH | BINF_DASHDASHVALID, bin_cd, 0, 2, BIN_PUSHD, "qsPL", NULL), BUILTIN("pushln", 0, bin_print, 0, -1, BIN_PRINT, NULL, "-nz"), BUILTIN("pwd", 0, bin_pwd, 0, 0, 0, "rLP", NULL), ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: PATCH Re: 5.3: printf - 2016-12-14 4:48 ` PATCH " Bart Schaefer @ 2016-12-14 9:39 ` Peter Stephenson 2016-12-14 16:51 ` Daniel Shahaf 0 siblings, 1 reply; 12+ messages in thread From: Peter Stephenson @ 2016-12-14 9:39 UTC (permalink / raw) To: zsh-workers On Tue, 13 Dec 2016 20:48:15 -0800 Bart Schaefer <schaefer@brasslantern.com> wrote: > Apparently this was introduced in 37467 when I changed "printf" from > having no options at all to having the -v option for print-to-variable. > > There's some documentation saying that ideally we would not create any > new builtins with BINF_SKIPINVALID but I don't see any other way to get > back the old behavior. This was in any case ignoring the vagaries of traditional shell behaviour, which demand inconsistency. Supporting printf -v but treating a - without a following alphanumeric as part of the string, which seem to be the requirements we're faced with, aren't really consistent. So I think anything that works goes here. pws ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: PATCH Re: 5.3: printf - 2016-12-14 9:39 ` Peter Stephenson @ 2016-12-14 16:51 ` Daniel Shahaf 2016-12-14 18:44 ` Bart Schaefer 0 siblings, 1 reply; 12+ messages in thread From: Daniel Shahaf @ 2016-12-14 16:51 UTC (permalink / raw) To: Peter Stephenson; +Cc: zsh-workers Peter Stephenson wrote on Wed, Dec 14, 2016 at 09:39:22 +0000: > On Tue, 13 Dec 2016 20:48:15 -0800 > Bart Schaefer <schaefer@brasslantern.com> wrote: > > Apparently this was introduced in 37467 when I changed "printf" from > > having no options at all to having the -v option for print-to-variable. > > > > There's some documentation saying that ideally we would not create any > > new builtins with BINF_SKIPINVALID but I don't see any other way to get > > back the old behavior. > > This was in any case ignoring the vagaries of traditional shell > behaviour, which demand inconsistency. Supporting printf -v but > treating a - without a following alphanumeric as part of the string, > which seem to be the requirements we're faced with, aren't really > consistent. So I think anything that works goes here. The grandparent patch fixes all the cases given so far in this thread, except that «printf --» and «printf -- -» yield an error and "-", respectively — whereas in sh mode they should both print "--". I'd tried to split the printf logic out of bin_print() [lines 4648 through end of function] in order to pave the way for a separate bin_printf(), but with little success. Thanks, Daniel ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: PATCH Re: 5.3: printf - 2016-12-14 16:51 ` Daniel Shahaf @ 2016-12-14 18:44 ` Bart Schaefer 2016-12-15 0:50 ` Daniel Shahaf 0 siblings, 1 reply; 12+ messages in thread From: Bart Schaefer @ 2016-12-14 18:44 UTC (permalink / raw) To: zsh-workers On Dec 14, 4:51pm, Daniel Shahaf wrote: } } The grandparent patch fixes all the cases given so far in this thread, } except that "printf --" and "printf -- -" yield an error and "-", } respectively - whereas in sh mode they should both print "--". Bash prints an error and "-" respectively in those two cases as well, so I think it's unclear what should happen for that in sh mode. $ printf -- printf: usage: printf [-v var] format [arguments] ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: PATCH Re: 5.3: printf - 2016-12-14 18:44 ` Bart Schaefer @ 2016-12-15 0:50 ` Daniel Shahaf 2016-12-15 1:14 ` Chet Ramey 0 siblings, 1 reply; 12+ messages in thread From: Daniel Shahaf @ 2016-12-15 0:50 UTC (permalink / raw) To: zsh-workers Bart Schaefer wrote on Wed, Dec 14, 2016 at 10:44:50 -0800: > On Dec 14, 4:51pm, Daniel Shahaf wrote: > } > } The grandparent patch fixes all the cases given so far in this thread, > } except that "printf --" and "printf -- -" yield an error and "-", > } respectively - whereas in sh mode they should both print "--". > > Bash prints an error and "-" respectively in those two cases as well, > so I think it's unclear what should happen for that in sh mode. I was aiming for POSIX-compliance, not bash-compliance, for sh mode. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: PATCH Re: 5.3: printf - 2016-12-15 0:50 ` Daniel Shahaf @ 2016-12-15 1:14 ` Chet Ramey 2016-12-15 22:45 ` Daniel Shahaf 0 siblings, 1 reply; 12+ messages in thread From: Chet Ramey @ 2016-12-15 1:14 UTC (permalink / raw) To: Daniel Shahaf, zsh-workers; +Cc: chet.ramey On 12/14/16 7:50 PM, Daniel Shahaf wrote: > Bart Schaefer wrote on Wed, Dec 14, 2016 at 10:44:50 -0800: >> On Dec 14, 4:51pm, Daniel Shahaf wrote: >> } >> } The grandparent patch fixes all the cases given so far in this thread, >> } except that "printf --" and "printf -- -" yield an error and "-", >> } respectively - whereas in sh mode they should both print "--". >> >> Bash prints an error and "-" respectively in those two cases as well, >> so I think it's unclear what should happen for that in sh mode. > > I was aiming for POSIX-compliance, not bash-compliance, for sh mode. The format is not optional, according to Posix. All shells aiming for Posix conformance throw an error on `printf --'. -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, UTech, CWRU chet@case.edu http://cnswww.cns.cwru.edu/~chet/ ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: PATCH Re: 5.3: printf - 2016-12-15 1:14 ` Chet Ramey @ 2016-12-15 22:45 ` Daniel Shahaf 2016-12-15 23:48 ` Chet Ramey 0 siblings, 1 reply; 12+ messages in thread From: Daniel Shahaf @ 2016-12-15 22:45 UTC (permalink / raw) To: Chet Ramey; +Cc: zsh-workers Chet Ramey wrote on Wed, Dec 14, 2016 at 20:14:31 -0500: > On 12/14/16 7:50 PM, Daniel Shahaf wrote: > > Bart Schaefer wrote on Wed, Dec 14, 2016 at 10:44:50 -0800: > >> On Dec 14, 4:51pm, Daniel Shahaf wrote: > >> } > >> } The grandparent patch fixes all the cases given so far in this thread, > >> } except that "printf --" and "printf -- -" yield an error and "-", > >> } respectively - whereas in sh mode they should both print "--". > >> > >> Bash prints an error and "-" respectively in those two cases as well, > >> so I think it's unclear what should happen for that in sh mode. > > > > I was aiming for POSIX-compliance, not bash-compliance, for sh mode. > > The format is not optional, according to Posix. Sure. > All shells aiming for Posix conformance throw an error on `printf --'. This surprises me; it doesn't match my understanding of the spec. (I thought POSIX would take "--" to be the format string.) Cheers, Daniel (trying not to repeat myself _too_ much..) ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: PATCH Re: 5.3: printf - 2016-12-15 22:45 ` Daniel Shahaf @ 2016-12-15 23:48 ` Chet Ramey 2016-12-16 0:56 ` Daniel Shahaf 0 siblings, 1 reply; 12+ messages in thread From: Chet Ramey @ 2016-12-15 23:48 UTC (permalink / raw) To: Daniel Shahaf; +Cc: chet.ramey, zsh-workers On 12/15/16 5:45 PM, Daniel Shahaf wrote: > This surprises me; it doesn't match my understanding of the spec. > (I thought POSIX would take "--" to be the format string.) "Standard utilities that do not accept options, but that do accept operands, shall recognize "--" as a first argument to be discarded." http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap01.html#tag_17_04 Chet -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, UTech, CWRU chet@case.edu http://cnswww.cns.cwru.edu/~chet/ ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: PATCH Re: 5.3: printf - 2016-12-15 23:48 ` Chet Ramey @ 2016-12-16 0:56 ` Daniel Shahaf 0 siblings, 0 replies; 12+ messages in thread From: Daniel Shahaf @ 2016-12-16 0:56 UTC (permalink / raw) To: Chet Ramey; +Cc: zsh-workers Chet Ramey wrote on Thu, Dec 15, 2016 at 18:48:13 -0500: > On 12/15/16 5:45 PM, Daniel Shahaf wrote: > > > This surprises me; it doesn't match my understanding of the spec. > > (I thought POSIX would take "--" to be the format string.) > > "Standard utilities that do not accept options, but that do accept > operands, shall recognize "--" as a first argument to be discarded." > > http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap01.html#tag_17_04 Thank you for the reference. diff --git a/Test/B03print.ztst b/Test/B03print.ztst index 7a43f9c..c65568a 100644 --- a/Test/B03print.ztst +++ b/Test/B03print.ztst @@ -334,5 +334,3 @@ 0:regression test of printf with assorted ambiguous options or formats >------x ?(eval):printf:3: not enough arguments -F:There is some question whether "printf --" should be an error as above, -F:or should treat "--" as the format string. Bash agrees on the error. ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2016-12-16 0:59 UTC | newest] Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2016-12-12 23:41 5.3: printf - Daniel Shahaf 2016-12-13 4:21 ` Bart Schaefer 2016-12-13 6:25 ` Daniel Shahaf 2016-12-14 4:48 ` PATCH " Bart Schaefer 2016-12-14 9:39 ` Peter Stephenson 2016-12-14 16:51 ` Daniel Shahaf 2016-12-14 18:44 ` Bart Schaefer 2016-12-15 0:50 ` Daniel Shahaf 2016-12-15 1:14 ` Chet Ramey 2016-12-15 22:45 ` Daniel Shahaf 2016-12-15 23:48 ` Chet Ramey 2016-12-16 0:56 ` Daniel Shahaf
Code repositories for project(s) associated with this public inbox https://git.vuxu.org/mirror/zsh/ This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).