"The 'printf' in shells is different than the 'printf' specified by ISO
C/POSIX. The documentation for the bash built-in can be found here:

    $ info '(bash)Bash Builtins'

The 'printf' provided in your C library should be found in man page
section 3. Your system probably comes with a program (not a shell
built-in) too. That can be found in man page section 1.

   # C library.
   $ man -s 3 printf
   # System program.
   $ man -s 1 printf"

Is ambiguous and confusing documentation not considered a bug to be
fixed? Please say as much in the documentation, then.

On Mon, May 27, 2024 at 8:23 PM Lawrence Velázquez <v...@larryv.me> wrote:
> On Mon, May 27, 2024, at 8:58 PM, porterleete wrote:
> >   The man page for printf says that for integer m, %m$ lets you
> > specify which argument that the conversion specification will use.
> > Similarly, using *m$ instead of * in a conversion specification lets
> > you specify which argument the * will pull from. This feature is
> > unimplemented in Bash. I am guessing that Bash is using either the ISO
> > C standard, or an older version of some mainstream compiler for printf
> > or some other standard
> Neither.  Bash's printf is based on the POSIX printf utility:
> https://pubs.opengroup.org/onlinepubs/9699919799/utilities/printf.html
> It also implements a few extensions, which are documented in the
> bash man page and manual.  (IIRC there is also at least one
> undocumented extension.)
> > Fix:
> >  Either update the documentation of what printf in bash actually does.
> > If printf is using a standard for printf other than "what the biggest
> > C compilers currently do", document which standard it's using or
> > update it to the newest standard used by gcc and clang. If it really
> > is just this one feature that's missing, add it in or document its
> > absence.
> The bash man page and manual already state:
>         In addition to the standard printf(1) format specifications,
>         printf interprets the following extensions:
>         %b [...]
>         %q [...]
>         %Q [...]
>         %(datefmt)T [...]
> I guess it could be more explicit, but "the standard printf(1)
> format specifications" refers to the POSIX standard for the printf
> *utility*.  The C printf *function* is tangentially related but
> not directly relevant.
> --
> vq

Reply via email to