From f27bf94a7927219f96e97e1a21f2ade9dd439a3e Mon Sep 17 00:00:00 2001
From: Chet Ramey
Date: Fri, 5 Dec 2025 15:50:38 -0500
Subject: [PATCH] implementation of printf '%N$' numbered argument conversion
specifier, compatible with coreutils
---
CWRU/CWRU.chlog | 16 +
MANIFEST | 1 +
builtins/printf.def | 296 +++++-
doc/bash.0 | 41 +-
doc/bash.1 | 22 +-
doc/bash.html | 54 +-
doc/bash.info | 314 +++----
doc/bash.pdf | Bin 441916 -> 443436 bytes
doc/bashref.aux | 2 +-
doc/bashref.bt | 8 +-
doc/bashref.bts | 8 +-
doc/bashref.cp | 2 +-
doc/bashref.cps | 2 +-
doc/bashref.dvi | Bin 897364 -> 899612 bytes
doc/bashref.html | 40 +-
doc/bashref.info | 314 +++----
doc/bashref.log | 39 +-
doc/bashref.pdf | Bin 810203 -> 810750 bytes
doc/bashref.texi | 18 +
doc/bashref.toc | 4 +-
doc/builtins.0 | 2073 ++++++++++++++++++++++---------------------
doc/builtins.pdf | Bin 143969 -> 144668 bytes
doc/version.texi | 6 +-
execute_cmd.c | 5 +-
tests/printf.right | 70 ++
tests/printf.tests | 1 +
tests/printf8.sub | 95 ++
trap.c | 9 +-
trap.h | 2 +-
29 files changed, 2013 insertions(+), 1429 deletions(-)
create mode 100644 tests/printf8.sub
diff --git a/CWRU/CWRU.chlog b/CWRU/CWRU.chlog
index 65f4c95b..ab59fcd1 100644
--- a/CWRU/CWRU.chlog
+++ b/CWRU/CWRU.chlog
@@ -12311,3 +12311,19 @@ execute_cmd.c
- execute_in_subshell: clear the exit trap before checking for a
pending fatal signal
From https://savannah.gnu.org/bugs/?67745
+
+ 12/2
+ ----
+builtins/printf.def
+ - import %N$ specifier implementation from printf-nspecifier branch;
+ implementation is similar to coreutils'.
+ - we warn about mixing numbered and unnumbered format specifiers in
+ posix mode
+ - getint: now takes second argument to deal with numbered specifiers
+ - getstar: new function to get precision and fieldwidth from argument
+ list if `*' in format specifier, handling numbered arguments
+ - narg, nptr: we build a new format string as necessary
+ Originally from https://savannah.gnu.org/support/?111166, also
+ discussed in thread starting with
+ https://lists.gnu.org/archive/html/bug-bash/2025-02/msg00151.html
+
diff --git a/MANIFEST b/MANIFEST
index d1b00de7..f9af056b 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -1442,6 +1442,7 @@ tests/printf4.sub f
tests/printf5.sub f
tests/printf6.sub f
tests/printf7.sub f
+tests/printf8.sub f
tests/procsub.tests f
tests/procsub.right f
tests/procsub1.sub f
diff --git a/builtins/printf.def b/builtins/printf.def
index 2bb70581..b3622017 100644
--- a/builtins/printf.def
+++ b/builtins/printf.def
@@ -100,6 +100,8 @@ extern int errno;
{ \
QUIT; \
retval = value; \
+ if (narg_argc != -1) \
+ free (narg_argv); \
if (conv_bufsize > 4096 ) \
{ \
free (conv_buf); \
@@ -178,6 +180,10 @@ extern int errno;
#define LENMODS "hjlLtz"
#define DIGITS "0123456789"
+#ifndef NL_ARGMAX
+# define NL_ARGMAX 999
+#endif
+
#ifndef TIMELEN_MAX
# define TIMELEN_MAX 128
#endif
@@ -202,7 +208,8 @@ static int vbprintf (const char *, ...) __attribute__((__format__ (printf, 1, 2)
static char *mklong (char *, char *, size_t);
static int getchr (void);
static char *getstr (void);
-static int getint (int);
+static int getint (int, int);
+static int getstar (char **, int);
static intmax_t getintmax (void);
static uintmax_t getuintmax (void);
@@ -247,12 +254,42 @@ static size_t vblen;
static char **narg_argv;
static int narg_argc;
static int narg_maxind;
+static int narg_numind; /* last numbered argument specification */
+static int narg_seqind; /* only used when mixing numbered and unnumbered conversions */
+static int narg_base; /* used on format reuse */
+static char *narg_arg; /* argument corresponding to the numbered conversion spec */
+static int narg_convtype; /* 1 = numbered, 0 = unnumbered */
+static int narg_convwarned; /* want to minimize the warnings */
+static char *nfmt = 0;
static intmax_t tw;
static char *conv_buf;
static size_t conv_bufsize;
+static void
+init_numarg ()
+{
+ size_t len;
+ WORD_LIST *l;
+
+ len = list_length ((GENERIC_LIST *)orig_arglist);
+ narg_argv = (char **)xmalloc ((len + 2) * sizeof (char *)); /* +2 because we don't use 0 */
+
+ for (narg_argc = 1, l = orig_arglist; l; l = l->next)
+ narg_argv[narg_argc++] = l->word->word;
+
+ /* If we've processed some unnumbered conversion specifications before
+ we get the first numbered one, count those as "previous conversion
+ specifications that consumed an argument." */
+ for (narg_seqind = 0, l = orig_arglist; l != garglist; l = l->next)
+ narg_seqind++;
+
+ narg_argv[narg_argc] = NULL;
+ narg_maxind = narg_numind = narg_base = 0;
+ narg_arg = NULL;
+}
+
static inline int
decodeint (char **str, int diagnose, int overflow_return)
{
@@ -281,7 +318,10 @@ printf_builtin (WORD_LIST *list)
{
int ch, fieldwidth, precision;
int have_fieldwidth, have_precision, use_Lmod, altform, longform;
+ int moreargs;
char convch, thisch, nextch, *format, *modstart, *precstart, *fmt, *start;
+ char *nptr, *origfmt;
+ size_t nargind;
#if defined (HANDLE_MULTIBYTE)
char mbch[25]; /* 25 > MB_LEN_MAX, plus can handle 4-byte UTF-8 and large Unicode characters*/
int mbind, mblen, mb_cur_max;
@@ -293,6 +333,8 @@ printf_builtin (WORD_LIST *list)
conversion_error = 0;
vflag = 0;
+ narg_argc = -1;
+
reset_internal_getopt ();
while ((ch = internal_getopt (list, "v:")) != -1)
{
@@ -357,15 +399,23 @@ printf_builtin (WORD_LIST *list)
mb_cur_max = MB_CUR_MAX;
+ nfmt = xrealloc (nfmt, strlen (format) + 1); /* XXX error checking */
+ nfmt[0] = '\0';
+
/* Basic algorithm is to scan the format string for conversion
specifications -- once one is found, find out if the field
width or precision is a '*'; if it is, gather up value. Note,
format strings are reused as necessary to use up the provided
arguments, arguments of zero/null string are provided to use
up the format string. */
+
+ /* We only warn once, even if we reuse the format, and we only warn in
+ posix mode. */
+ narg_convwarned = !posixly_correct;
do
{
tw = 0;
+
/* find next format specification */
for (fmt = format; *fmt; fmt++)
{
@@ -409,7 +459,9 @@ printf_builtin (WORD_LIST *list)
}
/* ASSERT(*fmt == '%') */
- start = fmt++;
+ origfmt = fmt; /* saved for format errors */
+ nptr = start = nfmt; /* we construct our own format string */
+ *nptr++ = *fmt++;
if (*fmt == '%') /* %% prints a % */
{
@@ -417,37 +469,117 @@ printf_builtin (WORD_LIST *list)
continue;
}
+ narg_convtype = 0;
+ /* Look for possible %N$ numbered conversion specifier. */
+ /* "Conversions can be applied to the nth argument operand rather
+ than to the next argument operand. In this case, the conversion
+ specifier character '%' is replaced by the sequence "%n$",
+ where n is a decimal integer in the range [1,{NL_ARGMAX}],
+ giving the argument operand number. This feature provides for
+ the definition of format strings that select arguments in an
+ order appropriate to specific languages." */
+ /* This leaves nargv_curind pointing to the argument corresponding
+ to the numbered conversion spec or the next sequential one after
+ having processed a numbered spec, so the advancearg() in the
+ various code handling the conversion specifiers advances it. */
+ /* We don't allow N$ for precision or field width at this time. */
+ nargind = strspn (fmt, DIGITS);
+ if (nargind > 0 && fmt[nargind] == '$')
+ {
+ char *ep;
+ int narg, thisarg;
+
+ if (garglist != orig_arglist && narg_convwarned == 0)
+ {
+ builtin_warning ("%s", _("should not mix numbered and unnumbered conversions"));
+ narg_convwarned = 1;
+ }
+ if (narg_argc == -1)
+ init_numarg ();
+ thisarg = (int)strtol (fmt, &ep, 10);
+ /* "If it is a numbered argument conversion specification,
+ printf should write a diagnostic message to standard error
+ and exit with non-zero status" */
+ if (thisarg <= 0 || thisarg >= narg_argc)
+ {
+ /* We don't want to print this error message for numbered
+ conversions exceeding the number of arguments unless
+ we are in posix mode, so we set narg_numind = narg_argc
+ if we are not. */
+ if (thisarg <= 0 || posixly_correct)
+ {
+ builtin_error (_("%d: numbered conversion out of range"), thisarg);
+ PRETURN (EXECUTION_FAILURE);
+ }
+ thisarg = narg_argc;
+ }
+ thisarg += narg_base;
+ narg_numind = (thisarg < narg_argc) ? thisarg : narg_argc;
+ if (narg_numind > narg_maxind)
+ narg_maxind = narg_numind;
+ narg_arg = narg_argv[narg_numind];
+ narg_convtype = 1;
+ fmt += nargind + 1;
+ }
+ else if (narg_argc != -1)
+ {
+ int thisarg;
+
+ if (narg_convwarned == 0)
+ {
+ builtin_warning ("%s", _("should not mix numbered and unnumbered conversions"));
+ narg_convwarned = 1;
+ }
+ /* There is genuine incompatibility here between macOS/FreeBSD
+ printf and coreutils printf.
+ Given '%s %3$s %s\n' A B C D, coreutils printf treats the
+ unnumbered coversion specs sequentially, so it echoes "A C B",
+ then "D" on a new line.
+ FreeBSD printf treats the next unnumbered specifier following
+ a numbered specifier as numbered + 1, and prints "A C D".
+ zsh and ksh93 are like coreutils; mksh is like FreeBSD.
+ We follow coreutils here for now, but subject to change. */
+ narg_arg = (narg_seqind < narg_argc) ? narg_argv[++narg_seqind] : NULL;
+ if (narg_seqind > narg_maxind)
+ narg_maxind = narg_seqind;
+ }
+
/* Found format specification, skip to field width. We check for
alternate form for possible later use. */
- for (; *fmt && strchr(SKIP1, *fmt); ++fmt)
- if (*fmt == '#')
- altform++;
+ while (*fmt && strchr(SKIP1, *fmt))
+ {
+ if (*fmt == '#')
+ altform++;
+ *nptr++ = *fmt++; /* build format string */
+ }
+ *nptr = '\0';
/* Skip optional field width. */
if (*fmt == '*')
{
- fmt++;
+ *nptr++ = *fmt++;
have_fieldwidth = 1;
/* Handle field with overflow by ignoring fieldwidth for now.
- getint() prints a message. */
- fieldwidth = getint (0);
+ getstar() prints a message. */
+ fieldwidth = getstar (&fmt, 0);
}
else
while (DIGIT (*fmt))
- fmt++;
+ *nptr++ = *fmt++;
+ *nptr = '\0';
/* Skip optional '.' and precision */
if (*fmt == '.')
{
- ++fmt;
+ *nptr++ = *fmt++;
if (*fmt == '*')
{
- fmt++;
+ *nptr++ = *fmt++;
have_precision = 1;
/* Handle precision overflow by ignoring precision for now.
- getint() prints a message.
+ getstar() prints a message.
"A negative precision is treated as if it were missing." */
- precision = getint (-1);
+ precision = getstar (&fmt, -1);
}
else
{
@@ -460,12 +592,13 @@ printf_builtin (WORD_LIST *list)
#else
if (*fmt == '-')
#endif
- fmt++;
+ *nptr++ = *fmt++;
if (DIGIT (*fmt))
precstart = fmt;
while (DIGIT (*fmt))
- fmt++;
+ *nptr++ = *fmt++;
}
+ *nptr = '\0';
}
/* skip possible format modifiers */
@@ -475,7 +608,7 @@ printf_builtin (WORD_LIST *list)
{
use_Lmod |= USE_LONG_DOUBLE && *fmt == 'L';
longform |= *fmt == 'l';
- fmt++;
+ *nptr++ = *fmt++;
}
if (*fmt == 0)
@@ -484,6 +617,9 @@ printf_builtin (WORD_LIST *list)
PRETURN (EXECUTION_FAILURE);
}
+ *nptr++ = *fmt;
+ *nptr = '\0';
+
convch = *fmt;
thisch = modstart[0];
nextch = modstart[1];
@@ -607,7 +743,7 @@ printf_builtin (WORD_LIST *list)
if (*fmt != ')' || *++fmt != 'T')
{
builtin_warning (_("`%c': invalid time format specification"), *fmt);
- fmt = start;
+ fmt = origfmt;
free (timefmt);
PC (*fmt);
continue;
@@ -620,7 +756,10 @@ printf_builtin (WORD_LIST *list)
}
/* argument is seconds since the epoch with special -1 and -2 */
/* default argument is equivalent to -1; special case */
- arg = garglist ? getintmax () : -1;
+ if (narg_argc != -1)
+ arg = (narg_numind < narg_argc && narg_argv[narg_numind]) ? getintmax (): -1;
+ else
+ arg = garglist ? getintmax () : -1;
if (arg == -1)
secs = NOW; /* roughly date +%s */
else if (arg == -2)
@@ -643,8 +782,8 @@ printf_builtin (WORD_LIST *list)
else
timebuf[sizeof(timebuf) - 1] = '\0';
/* convert to %s format that preserves fieldwidth and precision */
- modstart[0] = 's';
- modstart[1] = '\0';
+ *nptr++ = 's';
+ *nptr = '\0';
r = printstr (start, timebuf, strlen (timebuf), fieldwidth, precision); /* XXX - %s for now */
if (r < 0)
PRETURN (EXECUTION_FAILURE);
@@ -821,8 +960,44 @@ printf_builtin (WORD_LIST *list)
/* PRETURN will print error message. */
PRETURN (EXECUTION_FAILURE);
}
+
+ /* "The format operand shall be reused as often as necessary to satisfy
+ the argument operands. If conversion specifications beginning with
+ a "%n$" sequence are used, on format reuse the value of n shall
+ refer to the nth argument operand following the highest numbered
+ argument operand consumed by the previous use of the format operand." */
+ if (narg_argc != -1)
+ {
+ /* If we consumed the last argument, we're done. */
+ moreargs = (narg_numind < narg_argc) && (narg_maxind < narg_argc) && (narg_seqind < narg_argc);
+ narg_base = narg_maxind;
+ narg_maxind = 0; /* need to recalculate this */
+ }
+ else
+ moreargs = garglist && garglist != list->next;
+
+ /* "on format reuse the value of n shall refer to the nth argument
+ operand following the highest numbered argument operand consumed
+ by the previous use of the format operand." */
+ /* This mess is to handle combining numbered and unnumbered conversion
+ specifiers. */
+ if (moreargs && narg_argc != -1)
+ {
+ /* If we decide to treat numbered and unnumbered specifiers with
+ different counters. */
+ if (garglist == 0 && orig_arglist != 0)
+ moreargs = 0;
+ /* I don't like this -- POSIX says "previous conversion specification
+ that consumed an argument", not "highest-numbered argument
+ processed" -- but this is what coreutils printf seems to do. */
+ narg_seqind = narg_base;
+ /* The second clause will be true if we processed the last
+ argument (not necessarily all arguments). */
+ if (narg_seqind >= narg_argc || (narg_base + 1) >= narg_argc)
+ moreargs = 0;
+ }
}
- while (garglist && garglist != list->next);
+ while (moreargs);
if (conversion_error)
retval = EXECUTION_FAILURE;
@@ -1346,13 +1521,25 @@ mklong (char *str, char *modifiers, size_t mlen)
static inline char *
getarg (void)
{
+ if (narg_argc != -1)
+ return narg_arg;
+
return (garglist ? garglist->word->word : 0);
}
static inline void
advancearg (void)
{
- garglist = garglist->next;
+ if (narg_argc != -1)
+ {
+#if 0
+ /* see if we need to manage narg_seqind here or in printf_builtin */
+ if (narg_numind < narg_argc)
+ narg_numind++;
+#endif
+ }
+ else
+ garglist = garglist->next;
}
static int
@@ -1404,15 +1591,19 @@ chk_converror (char *s, char *ep)
}
/* Don't call getintmax here because it may consume an argument on error, and
- we call this to get field width/precision arguments. */
+ we call this to get field width/precision arguments. This is only called
+ by getstar() to get field width/precision values from arguments. It does
+ not call getarg() and it does not advance the argument with advancearg. */
static int
-getint (int overflow_retval)
+getint (int numberedconv, int overflow_retval)
{
intmax_t ret;
char *ep, *arg;
int overflow;
- arg = getarg ();
+ /* XXX - check here that narg_numind < narg_argc and return null in that case? */
+ arg = (narg_argc != -1) ? (numberedconv ? narg_argv[narg_numind] : narg_argv[narg_seqind])
+ : (garglist ? garglist->word->word : 0);
if (arg == 0)
return (0);
@@ -1427,10 +1618,63 @@ getint (int overflow_retval)
chk_converror (arg, ep);
- advancearg ();
return (overflow ? overflow_retval : (int)ret);
}
+static int
+getstar (char **fmtp, int overflow_retval)
+{
+ int ret, numconv;
+ char *ep, **fp;
+ size_t l, ind;
+
+ fp = fmtp;
+
+ numconv = 0;
+ ep = *fp;
+ l = DIGIT (**fp) ? strspn (ep, DIGITS) : 0;
+ if (l > 0 && ep[l] == '$')
+ {
+ if (narg_argc == -1)
+ return overflow_retval;
+ ind = decodeint (fp, 1, -1);
+ if (**fp == '$')
+ {
+ ep = *fp + 1;
+ fp = &ep;
+ }
+ *fmtp = *fp;
+ ind += narg_base;
+ if (ind > 0 && ind <= narg_argc) /* can't have 0-based indices */
+ narg_numind = ind;
+ else
+ return overflow_retval;
+ numconv = 1;
+ if (narg_numind > narg_maxind)
+ narg_maxind = narg_numind;
+ }
+ else if (narg_argc != -1)
+ {
+ if (narg_convwarned == 0)
+ {
+ builtin_warning ("%s", _("should not mix numbered and unnumbered conversions"));
+ narg_convwarned = 1;
+ }
+ /* We manage the sequential index here and in printf_builtin */
+ if (narg_seqind < narg_argc)
+ ++narg_seqind;
+ if (narg_seqind > narg_maxind)
+ narg_maxind = narg_seqind;
+ }
+
+ ret = getint (numconv, overflow_retval);
+
+ if (narg_argc == -1)
+ advancearg ();
+
+ return ret;
+}
+
static intmax_t
getintmax (void)
{
diff --git a/doc/bash.0 b/doc/bash.0
index da4d7d8f..1549badb 100644
--- a/doc/bash.0
+++ b/doc/bash.0
@@ -1689,6 +1689,9 @@ PPAARRAAMMEETTEERRSS
The "+=" operator appends to an array variable when assigning using the
compound assignment syntax; see PPAARRAAMMEETTEERRSS above.
+ If one of the word expansions in a compound array assignment unsets the
+ variable, the results are unspecified.
+
An array element is referenced using ${_n_a_m_e[_s_u_b_s_c_r_i_p_t]}. The braces
are required to avoid conflicts with pathname expansion. If _s_u_b_s_c_r_i_p_t
is @@ or **, the word expands to all members of _n_a_m_e, unless noted in the
@@ -1899,7 +1902,7 @@ EEXXPPAANNSSIIOONN
_p_a_r_a_m_e_t_e_r is a positional parameter with more than one digit, or when
_p_a_r_a_m_e_t_e_r is followed by a character which is not to be interpreted as
part of its name. The _p_a_r_a_m_e_t_e_r is a shell parameter as described
- above PPAARRAAMMEETTEERRSS) or an array reference (AArrrraayyss).
+ above (PPAARRAAMMEETTEERRSS) or an array reference (AArrrraayyss).
If the first character of _p_a_r_a_m_e_t_e_r is an exclamation point (!!), and
_p_a_r_a_m_e_t_e_r is not a _n_a_m_e_r_e_f, it introduces a level of indirection. BBaasshh
@@ -3729,6 +3732,7 @@ RREEAADDLLIINNEE
form
sseett _v_a_r_i_a_b_l_e_-_n_a_m_e _v_a_l_u_e
+
or using the bbiinndd builtin command (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS below).
Except where noted, rreeaaddlliinnee variables can take the values OOnn or OOffff
@@ -4829,7 +4833,7 @@ RREEAADDLLIINNEE
fined, programmable completion performs rreeaaddlliinnee's default completion.
The options supplied to ccoommpplleettee and ccoommppoopptt can control how rreeaaddlliinnee
- treats the completions. For instance, the _-_o _f_u_l_l_q_u_o_t_e option tells
+ treats the completions. For instance, the --oo ffuullllqquuoottee option tells
rreeaaddlliinnee to quote the matches as if they were filenames. See the de-
scription of ccoommpplleettee below for details.
@@ -5745,8 +5749,8 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS
directories in which to search for _f_i_l_e_n_a_m_e. The default for
BBAASSHH__LLOOAADDAABBLLEESS__PPAATTHH is system-dependent, and may include "." to
force a search of the current directory. The --dd option will
- delete a builtin previously loaded with --ff. If _-_s is used with
- _-_f, the new builtin becomes a POSIX special builtin.
+ delete a builtin previously loaded with --ff. If --ss is used with
+ --ff, the new builtin becomes a POSIX special builtin.
If no options are supplied and a _n_a_m_e is not a shell builtin,
eennaabbllee will attempt to load _n_a_m_e from a shared object named
@@ -6164,7 +6168,7 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS
last.
If the top element of the directory stack is modified, and the
- _-_n option was not supplied, ppooppdd uses the ccdd builtin to change
+ --nn option was not supplied, ppooppdd uses the ccdd builtin to change
to the directory at the top of the stack. If the ccdd fails, ppooppdd
returns a non-zero value.
@@ -6232,12 +6236,27 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS
is the numeric value of the following character, using the cur-
rent locale.
- The _f_o_r_m_a_t is reused as necessary to consume all of the _a_r_g_u_-
+ Format specifiers may apply to the _nth argument rather than the
+ next sequential argument. In this case, the '%' in the format
+ specifier is replaced by the sequence "%_n$", where _n is a deci-
+ mal integer greater than 0, giving the argument number to use as
+ the operand. The format string should not mix numbered and un-
+ numbered argument specifiers, though this is allowed. Unnum-
+ bered argument specifiers always refer to the next argument fol-
+ lowing the last argument consumed by an unnumbered specifier;
+ numbered argument specifiers refer to absolute positions in the
+ argument list.
+
+ The _f_o_r_m_a_t is reused as necessary to consume all of the _a_r_g_u_-
_m_e_n_t_s. If the _f_o_r_m_a_t requires more _a_r_g_u_m_e_n_t_s than are supplied,
- the extra format specifications behave as if a zero value or
- null string, as appropriate, had been supplied. The return
- value is zero on success, non-zero if an invalid option is sup-
- plied or a write or assignment error occurs.
+ the extra format specifications behave as if a zero value or
+ null string, as appropriate, had been supplied. If _f_o_r_m_a_t is
+ reused, a numbered argument specifier "%_n$" refers to the _nth
+ argument following the highest numbered argument consumed by the
+ previous use of _f_o_r_m_a_t.
+
+ The return value is zero on success, non-zero if an invalid op-
+ tion is supplied or a write or assignment error occurs.
ppuusshhdd [--nn] [+_n] [-_n]
ppuusshhdd [--nn] [_d_i_r]
@@ -7555,4 +7574,4 @@ BBUUGGSS
Array variables may not (yet) be exported.
-GNU Bash 5.3 2025 October 6 _B_A_S_H(1)
+GNU Bash 5.3 2025 December 2 _B_A_S_H(1)
diff --git a/doc/bash.1 b/doc/bash.1
index afe320ee..4554754e 100644
--- a/doc/bash.1
+++ b/doc/bash.1
@@ -5,7 +5,7 @@
.\" Case Western Reserve University
.\" chet.ramey@case.edu
.\"
-.\" Last Change: Mon Nov 17 11:37:04 EST 2025
+.\" Last Change: Tue Dec 2 16:43:36 EST 2025
.\"
.\" For bash_builtins, strip all but "SHELL BUILTIN COMMANDS" section
.\" For rbash, strip all but "RESTRICTED SHELL" section
@@ -22,7 +22,7 @@
.ds zX \" empty
.if \n(zZ=1 .ig zZ
.if \n(zY=1 .ig zY
-.TH BASH 1 "2025 November 17" "GNU Bash 5.3"
+.TH BASH 1 "2025 December 2" "GNU Bash 5.3"
.\"
.ie \n(.g \{\
.ds ' \(aq
@@ -11148,10 +11148,28 @@ except that a leading plus or minus sign is allowed, and if the leading
character is a single or double quote, the value is the numeric value of
the following character, using the current locale.
.IP
+Format specifiers may apply to the \fIn\fPth argument rather than the next
+sequential argument.
+In this case, the '%' in the format specifier is replaced by the
+sequence
+.Q %\fIn\fP$ ,
+where \fIn\fP is a decimal integer greater than 0,
+giving the argument number to use as the operand.
+The format string should not mix numbered and unnumbered argument specifiers,
+though this is allowed.
+Unnumbered argument specifiers always refer to the next argument following
+the last argument consumed by an unnumbered specifier; numbered argument
+specifiers refer to absolute positions in the argument list.
+.IP
The \fIformat\fP is reused as necessary to consume all of the \fIarguments\fP.
If the \fIformat\fP requires more \fIarguments\fP than are supplied, the
extra format specifications behave as if a zero value or null string, as
appropriate, had been supplied.
+If \fIformat\fP is reused, a numbered argument specifier
+.Q %\fIn\fP$
+refers to the \fIn\fPth argument following the highest numbered argument
+consumed by the previous use of \fIformat\fP.
+.IP
The return value is zero on success,
non-zero if an invalid option is supplied or a write or assignment error
occurs.
diff --git a/doc/bash.html b/doc/bash.html
index 46a6da12..14e4e194 100644
--- a/doc/bash.html
+++ b/doc/bash.html
@@ -1,5 +1,5 @@
-
+
@@ -3736,6 +3736,10 @@ an index of −1 references the last element.
assigning using the compound assignment syntax; see
PARAMETERS above.
+If one of the
+word expansions in a compound array assignment unsets the
+variable, the results are unspecified.
+
An array element
is referenced using ${name[subscript]}. The
braces are required to avoid conflicts with pathname
@@ -4056,7 +4060,7 @@ required when parameter is a positional parameter
with more than one digit, or when parameter is
followed by a character which is not to be interpreted as
part of its name. The parameter is a shell parameter
-as described above PARAMETERS) or an array reference
+as described above (PARAMETERS) or an array reference
(Arrays).
If the first
@@ -7793,9 +7797,9 @@ with a statement of the form
set
variable−name value
-or using the bind builtin
-command (see SHELL BUILTIN COMMANDS
-below).
+or using the
+bind builtin command (see SHELL BUILTIN
+COMMANDS below).
Except where
noted, readline variables can take the values
@@ -9875,7 +9879,7 @@ completion.
The options
supplied to complete and compopt can control
how readline treats the completions. For instance,
-the −o fullquote option tells readline
+the −o fullquote option tells readline
to quote the matches as if they were filenames. See the
description of complete below for details.
@@ -10537,9 +10541,10 @@ interpretation.
All builtins
except :, true, false, echo, and
-test/[ accept --help as a special
-option. If --help is supplied, these builtins output
-a help message and exit with a status of 0.
+test/[ accept −−help as a
+special option. If −−help is supplied,
+these builtins output a help message and exit with a status
+of 0.
: [arguments]
No effect; the command does
@@ -12119,8 +12124,8 @@ The default for BASH_LOADABLES_PATH is
system-dependent, and may include “.” to force a
search of the current directory. The −d option
will delete a builtin previously loaded with
-−f. If −s is used with
-−f, the new builtin becomes a
+−f. If −s is used with
+−f, the new builtin becomes a
POSIX special builtin.
If no options
@@ -13011,7 +13016,7 @@ directory, “popd −1” the next to last.
If the top
element of the directory stack is modified, and the
-−n option was not supplied, popd uses
+−n option was not supplied, popd uses
the cd builtin to change to the directory at the top
of the stack. If the cd fails, popd returns a
non-zero value.
@@ -13131,14 +13136,33 @@ the leading character is a single or double quote, the value
is the numeric value of the following character, using the
current locale.
+Format
+specifiers may apply to the nth argument rather than
+the next sequential argument. In this case, the
+’%’ in the format specifier is replaced by the
+sequence “%n$”, where n is a
+decimal integer greater than 0, giving the argument number
+to use as the operand. The format string should not mix
+numbered and unnumbered argument specifiers, though this is
+allowed. Unnumbered argument specifiers always refer to the
+next argument following the last argument consumed by an
+unnumbered specifier; numbered argument specifiers refer to
+absolute positions in the argument list.
+
The
format is reused as necessary to consume all of the
arguments. If the format requires more
arguments than are supplied, the extra format
specifications behave as if a zero value or null string, as
-appropriate, had been supplied. The return value is zero on
-success, non-zero if an invalid option is supplied or a
-write or assignment error occurs.
+appropriate, had been supplied. If format is reused,
+a numbered argument specifier “%n$”
+refers to the nth argument following the highest
+numbered argument consumed by the previous use of
+format.
+
+The return
+value is zero on success, non-zero if an invalid option is
+supplied or a write or assignment error occurs.
pushd [−n]
[+n] [−n]
diff --git a/doc/bash.info b/doc/bash.info
index 17059200..3143f1c2 100644
--- a/doc/bash.info
+++ b/doc/bash.info
@@ -1,9 +1,9 @@
This is bash.info, produced by makeinfo version 7.2 from bashref.texi.
This text is a brief description of the features that are present in the
-Bash shell (version 5.3, 24 September 2025).
+Bash shell (version 5.3, 2 December 2025).
- This is Edition 5.3, last updated 24 September 2025, of âThe GNU Bash
+ This is Edition 5.3, last updated 2 December 2025, of âThe GNU Bash
Reference Manualâ, for âBashâ, Version 5.3.
Copyright © 1988-2025 Free Software Foundation, Inc.
@@ -26,10 +26,10 @@ Bash Features
*************
This text is a brief description of the features that are present in the
-Bash shell (version 5.3, 24 September 2025). The Bash home page is
+Bash shell (version 5.3, 2 December 2025). The Bash home page is
.
- This is Edition 5.3, last updated 24 September 2025, of âThe GNU Bash
+ This is Edition 5.3, last updated 2 December 2025, of âThe GNU Bash
Reference Manualâ, for âBashâ, Version 5.3.
Bash contains features that appear in other popular shells, and some
@@ -4369,7 +4369,7 @@ standard.
The â-fâ option means to load the new builtin command NAME from
shared object FILENAME, on systems that support dynamic loading.
- If FILENAME does not contain a slash. Bash will use the value of
+ If FILENAME does not contain a slash, Bash will use the value of
the âBASH_LOADABLES_PATHâ variable as a colon-separated list of
directories in which to search for FILENAME. The default for
âBASH_LOADABLES_PATHâ is system-dependent, and may include "." to
@@ -4561,12 +4561,25 @@ standard.
the numeric value of the following character, using the current
locale.
+ Format specifiers may apply to the Nth argument rather than the
+ next sequential argument. In this case, the â%â in the format
+ specifier is replaced by the sequence â%N$â, where N is a decimal
+ integer greater than 0, giving the argument number to use as the
+ operand. The format string should not mix numbered and unnumbered
+ argument specifiers, though this is allowed. Unnumbered argument
+ specifiers always refer to the next argument following the last
+ argument consumed by an unnumbered specifier; numbered argument
+ specifiers refer to absolute positions in the argument list.
+
The FORMAT is reused as necessary to consume all of the ARGUMENTS.
If the FORMAT requires more ARGUMENTS than are supplied, the extra
format specifications behave as if a zero value or null string, as
- appropriate, had been supplied. The return value is zero on
- success, non-zero if an invalid option is supplied or a write or
- assignment error occurs.
+ appropriate, had been supplied. If FORMAT is reused, a numbered
+ argument specifier â%N$â refers to the Nth argument following the
+ highest numbered argument consumed by the previous use of FORMAT.
+
+ The return value is zero on success, non-zero if an invalid option
+ is supplied or a write or assignment error occurs.
âreadâ
read [-Eers] [-a ANAME] [-d DELIM] [-i TEXT] [-n NCHARS]
@@ -7310,6 +7323,9 @@ end of the array, and an index of -1 references the last element.
The â+=â operator appends to an array variable when assigning using
the compound assignment syntax; see *note Shell Parameters:: above.
+ If one of the word expansions in a compound array assignment unsets
+the variable, the results are unspecified.
+
An array element is referenced using â${NAME[SUBSCRIPT]}â. The
braces are required to avoid conflicts with the shell's filename
expansion operators. If the SUBSCRIPT is â@â or â*â, the word expands
@@ -7569,8 +7585,8 @@ can appear in the prompt variables âPS0â, âPS1â, âPS2â, and âPS4
â\\â
A backslash.
â\[â
- Begin a sequence of non-printing characters. Thiss could be used
- to embed a terminal control sequence into the prompt.
+ Begin a sequence of non-printing characters. This could be used to
+ embed a terminal control sequence into the prompt.
â\]â
End a sequence of non-printing characters.
@@ -12950,8 +12966,8 @@ D.1 Index of Shell Builtin Commands
(line 71)
* pwd: Bourne Shell Builtins.
(line 265)
-* read: Bash Builtins. (line 558)
-* readarray: Bash Builtins. (line 669)
+* read: Bash Builtins. (line 571)
+* readarray: Bash Builtins. (line 682)
* readonly: Bourne Shell Builtins.
(line 277)
* return: Bourne Shell Builtins.
@@ -12960,7 +12976,7 @@ D.1 Index of Shell Builtin Commands
* shift: Bourne Shell Builtins.
(line 327)
* shopt: The Shopt Builtin. (line 9)
-* source: Bash Builtins. (line 678)
+* source: Bash Builtins. (line 691)
* suspend: Job Control Builtins.
(line 141)
* test: Bourne Shell Builtins.
@@ -12971,12 +12987,12 @@ D.1 Index of Shell Builtin Commands
(line 446)
* true: Bourne Shell Builtins.
(line 512)
-* type: Bash Builtins. (line 683)
-* typeset: Bash Builtins. (line 720)
-* ulimit: Bash Builtins. (line 726)
+* type: Bash Builtins. (line 696)
+* typeset: Bash Builtins. (line 733)
+* ulimit: Bash Builtins. (line 739)
* umask: Bourne Shell Builtins.
(line 517)
-* unalias: Bash Builtins. (line 834)
+* unalias: Bash Builtins. (line 847)
* unset: Bourne Shell Builtins.
(line 535)
* wait: Job Control Builtins.
@@ -13660,138 +13676,138 @@ D.5 Concept Index
Tag Table:
-Node: Top903
-Node: Introduction2846
-Node: What is Bash?3059
-Node: What is a shell?4192
-Node: Definitions6802
-Node: Basic Shell Features10129
-Node: Shell Syntax11353
-Node: Shell Operation12380
-Node: Quoting13671
-Node: Escape Character15009
-Node: Single Quotes15544
-Node: Double Quotes15893
-Node: ANSI-C Quoting17238
-Node: Locale Translation18632
-Node: Creating Internationalized Scripts20035
-Node: Comments24233
-Node: Shell Commands25000
-Node: Reserved Words25939
-Node: Simple Commands27082
-Node: Pipelines27744
-Node: Lists31000
-Node: Compound Commands32920
-Node: Looping Constructs33929
-Node: Conditional Constructs36478
-Node: Command Grouping51615
-Node: Coprocesses53107
-Node: GNU Parallel55793
-Node: Shell Functions56711
-Node: Shell Parameters65159
-Node: Positional Parameters70060
-Node: Special Parameters71150
-Node: Shell Expansions74611
-Node: Brace Expansion76800
-Node: Tilde Expansion80136
-Node: Shell Parameter Expansion83091
-Node: Command Substitution103738
-Node: Arithmetic Expansion107267
-Node: Process Substitution108443
-Node: Word Splitting109551
-Node: Filename Expansion111995
-Node: Pattern Matching115219
-Node: Quote Removal120985
-Node: Redirections121289
-Node: Executing Commands131545
-Node: Simple Command Expansion132212
-Node: Command Search and Execution134320
-Node: Command Execution Environment136764
-Node: Environment140212
-Node: Exit Status142115
-Node: Signals144174
-Node: Shell Scripts149122
-Node: Shell Builtin Commands152420
-Node: Bourne Shell Builtins154761
-Node: Bash Builtins181480
-Node: Modifying Shell Behavior218404
-Node: The Set Builtin218746
-Node: The Shopt Builtin230740
-Node: Special Builtins247793
-Node: Shell Variables248782
-Node: Bourne Shell Variables249216
-Node: Bash Variables251724
-Node: Bash Features291008
-Node: Invoking Bash292022
-Node: Bash Startup Files298606
-Node: Interactive Shells303848
-Node: What is an Interactive Shell?304256
-Node: Is this Shell Interactive?304918
-Node: Interactive Shell Behavior305742
-Node: Bash Conditional Expressions309503
-Node: Shell Arithmetic314920
-Node: Aliases318247
-Node: Arrays321381
-Node: The Directory Stack328969
-Node: Directory Stack Builtins329766
-Node: Controlling the Prompt334211
-Node: The Restricted Shell337096
-Node: Bash POSIX Mode339978
-Node: Shell Compatibility Mode358925
-Node: Job Control367932
-Node: Job Control Basics368389
-Node: Job Control Builtins374757
-Node: Job Control Variables381545
-Node: Command Line Editing382776
-Node: Introduction and Notation384479
-Node: Readline Interaction386831
-Node: Readline Bare Essentials388019
-Node: Readline Movement Commands389827
-Node: Readline Killing Commands390823
-Node: Readline Arguments392846
-Node: Searching393936
-Node: Readline Init File396179
-Node: Readline Init File Syntax397482
-Node: Conditional Init Constructs424433
-Node: Sample Init File428818
-Node: Bindable Readline Commands431938
-Node: Commands For Moving433476
-Node: Commands For History435940
-Node: Commands For Text441331
-Node: Commands For Killing445456
-Node: Numeric Arguments448244
-Node: Commands For Completion449396
-Node: Keyboard Macros455092
-Node: Miscellaneous Commands455793
-Node: Readline vi Mode462360
-Node: Programmable Completion463337
-Node: Programmable Completion Builtins473073
-Node: A Programmable Completion Example484810
-Node: Using History Interactively490155
-Node: Bash History Facilities490836
-Node: Bash History Builtins494571
-Node: History Interaction501042
-Node: Event Designators505992
-Node: Word Designators507570
-Node: Modifiers509962
-Node: Installing Bash511899
-Node: Basic Installation513015
-Node: Compilers and Options516891
-Node: Compiling For Multiple Architectures517641
-Node: Installation Names519394
-Node: Specifying the System Type521628
-Node: Sharing Defaults522374
-Node: Operation Controls523088
-Node: Optional Features524107
-Node: Reporting Bugs536830
-Node: Major Differences From The Bourne Shell538187
-Node: GNU Free Documentation License559614
-Node: Indexes584791
-Node: Builtin Index585242
-Node: Reserved Word Index592340
-Node: Variable Index594785
-Node: Function Index612198
-Node: Concept Index626193
+Node: Top899
+Node: Introduction2838
+Node: What is Bash?3051
+Node: What is a shell?4184
+Node: Definitions6794
+Node: Basic Shell Features10121
+Node: Shell Syntax11345
+Node: Shell Operation12372
+Node: Quoting13663
+Node: Escape Character15001
+Node: Single Quotes15536
+Node: Double Quotes15885
+Node: ANSI-C Quoting17230
+Node: Locale Translation18624
+Node: Creating Internationalized Scripts20027
+Node: Comments24225
+Node: Shell Commands24992
+Node: Reserved Words25931
+Node: Simple Commands27074
+Node: Pipelines27736
+Node: Lists30992
+Node: Compound Commands32912
+Node: Looping Constructs33921
+Node: Conditional Constructs36470
+Node: Command Grouping51607
+Node: Coprocesses53099
+Node: GNU Parallel55785
+Node: Shell Functions56703
+Node: Shell Parameters65151
+Node: Positional Parameters70052
+Node: Special Parameters71142
+Node: Shell Expansions74603
+Node: Brace Expansion76792
+Node: Tilde Expansion80128
+Node: Shell Parameter Expansion83083
+Node: Command Substitution103730
+Node: Arithmetic Expansion107259
+Node: Process Substitution108435
+Node: Word Splitting109543
+Node: Filename Expansion111987
+Node: Pattern Matching115211
+Node: Quote Removal120977
+Node: Redirections121281
+Node: Executing Commands131537
+Node: Simple Command Expansion132204
+Node: Command Search and Execution134312
+Node: Command Execution Environment136756
+Node: Environment140204
+Node: Exit Status142107
+Node: Signals144166
+Node: Shell Scripts149114
+Node: Shell Builtin Commands152412
+Node: Bourne Shell Builtins154753
+Node: Bash Builtins181472
+Node: Modifying Shell Behavior219208
+Node: The Set Builtin219550
+Node: The Shopt Builtin231544
+Node: Special Builtins248597
+Node: Shell Variables249586
+Node: Bourne Shell Variables250020
+Node: Bash Variables252528
+Node: Bash Features291812
+Node: Invoking Bash292826
+Node: Bash Startup Files299410
+Node: Interactive Shells304652
+Node: What is an Interactive Shell?305060
+Node: Is this Shell Interactive?305722
+Node: Interactive Shell Behavior306546
+Node: Bash Conditional Expressions310307
+Node: Shell Arithmetic315724
+Node: Aliases319051
+Node: Arrays322185
+Node: The Directory Stack329888
+Node: Directory Stack Builtins330685
+Node: Controlling the Prompt335130
+Node: The Restricted Shell338014
+Node: Bash POSIX Mode340896
+Node: Shell Compatibility Mode359843
+Node: Job Control368850
+Node: Job Control Basics369307
+Node: Job Control Builtins375675
+Node: Job Control Variables382463
+Node: Command Line Editing383694
+Node: Introduction and Notation385397
+Node: Readline Interaction387749
+Node: Readline Bare Essentials388937
+Node: Readline Movement Commands390745
+Node: Readline Killing Commands391741
+Node: Readline Arguments393764
+Node: Searching394854
+Node: Readline Init File397097
+Node: Readline Init File Syntax398400
+Node: Conditional Init Constructs425351
+Node: Sample Init File429736
+Node: Bindable Readline Commands432856
+Node: Commands For Moving434394
+Node: Commands For History436858
+Node: Commands For Text442249
+Node: Commands For Killing446374
+Node: Numeric Arguments449162
+Node: Commands For Completion450314
+Node: Keyboard Macros456010
+Node: Miscellaneous Commands456711
+Node: Readline vi Mode463278
+Node: Programmable Completion464255
+Node: Programmable Completion Builtins473991
+Node: A Programmable Completion Example485728
+Node: Using History Interactively491073
+Node: Bash History Facilities491754
+Node: Bash History Builtins495489
+Node: History Interaction501960
+Node: Event Designators506910
+Node: Word Designators508488
+Node: Modifiers510880
+Node: Installing Bash512817
+Node: Basic Installation513933
+Node: Compilers and Options517809
+Node: Compiling For Multiple Architectures518559
+Node: Installation Names520312
+Node: Specifying the System Type522546
+Node: Sharing Defaults523292
+Node: Operation Controls524006
+Node: Optional Features525025
+Node: Reporting Bugs537748
+Node: Major Differences From The Bourne Shell539105
+Node: GNU Free Documentation License560532
+Node: Indexes585709
+Node: Builtin Index586160
+Node: Reserved Word Index593258
+Node: Variable Index595703
+Node: Function Index613116
+Node: Concept Index627111
End Tag Table
diff --git a/doc/bash.pdf b/doc/bash.pdf
index 1303fb09c3220c8f6e48546d5c4cc694ab9969c4..eb9f142ad0a23b2d1197c98ebd1469d205ae1be2 100644
GIT binary patch
delta 369159
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