- print_unix_command_map: call rl_macro_dumper with an argument of -1
so we can use the output directly in another call to bind -x.
+ 7/20
+ ----
+pathexp.c
+ - quote_string_for_globbing: don't bother backslash-quoting multibyte
+ characters. It matters for macOS and doesn't make a difference for
+ other systems, and those aren't going to be special globbing chars.
+ From a report by Grisha Levit <grishalevit@gmail.com>
+
+lib/glob/glob.c
+ - glob_vector: normalize the pattern with fnx_fromfs so we make sure
+ it's also in NFC on macOS (other systems don't care). This is a
+ POSIX violation, but part of correcting the longtime HFS+ (and Finder)
+ misfeature
+
+lib/readline/complete.c
+ - rl_filename_completion_function: if the application sets a filename
+ rewrite hook, use it to rewrite the filename we're matching as well
+ as filenames read with readdir().
+ From a report by Grisha Levit <grishalevit@gmail.com>
+
+ 7/21
+ ----
+pathexp.c
+ - quote_string_for_globbing: see if we can get away without backslash-
+ quoting single-byte characters that aren't CTLESC or characters
+ that are special to EREs or BREs, even if they're quoted
+
+bashline.c
+ - bashline_set_filename_hooks: convenience function to set the
+ directory hook and the filename rewrite and stat hooks; call from
+ other places in the file so these are set consistently
+
+bashline.h
+ - bashline_set_filename_hooks: extern declaration
+
+builtins/complete.def
+ - compgen_builtin: make sure to set the directory and filename hooks
+ so compgen called from a script works more like compgen called
+ from a word completion context.
+ Inspired by a report by Grisha Levit <grishalevit@gmail.com>
+
+doc/Makefile.in
+ - bash.pdf: use groff -T pdf to create, instead of creating postscript
+ and then using ghostscript
+
+ 7/24
+ ----
+jobs.c
+ - start_job: unconditionally send SIGCONT to the job we just started,
+ even if we think it was already running, to reduce the window for a
+ potential race condition, and only change the state to RUNNING if
+ the SIGCONT succeeds or if the process has terminated so we can
+ clean it up later.
+ Report from Earl Chew <earl_chew@yahoo.com>
subst.o: bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h
test.o: bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h
trap.o: bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h
+unwind_prot.o: bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h
variables.o: bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h
version.o: bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h
xmalloc.o: bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h
/* Tell the completer that we want a crack first. */
rl_attempted_completion_function = attempt_shell_completion;
- /* Tell the completer that we might want to follow symbolic links or
- do other expansion on directory names. */
- set_directory_hook ();
-
- rl_filename_rewrite_hook = bash_filename_rewrite_hook;
-
- rl_filename_stat_hook = bash_filename_stat_hook;
+ bashline_set_filename_hooks ();
/* Tell the filename completer we want a chance to ignore some names. */
rl_ignore_some_completions_function = filename_completion_ignore;
rl_filename_quoting_function = bash_quote_filename;
- set_directory_hook ();
- rl_filename_stat_hook = bash_filename_stat_hook;
+ bashline_set_filename_hooks ();
bashline_reset_event_hook ();
complete_fullquote = 1; /* full filename quoting by default */
rl_filename_quote_characters = default_filename_quote_characters;
set_filename_bstab (rl_filename_quote_characters);
- set_directory_hook ();
- rl_filename_stat_hook = bash_filename_stat_hook;
+ bashline_set_filename_hooks ();
rl_sort_completion_matches = 1; /* sort by default */
rl_directory_rewrite_hook = hookf;
}
+/* Set the readline hooks that affect how directories and filenames are
+ converted. Extern so other parts of the shell can use. */
+void
+bashline_set_filename_hooks (void)
+{
+ /* Tell the completer that we might want to follow symbolic links or
+ do other expansion on directory names. */
+ set_directory_hook ();
+
+ rl_filename_rewrite_hook = bash_filename_rewrite_hook;
+ rl_filename_stat_hook = bash_filename_stat_hook;
+}
+
/* Check whether not DIRNAME, with any trailing slash removed, exists. If
SHOULD_DEQUOTE is non-zero, we dequote the directory name first. */
static int
extern char **bash_default_completion (const char *, int, int, int, int);
+extern void bashline_set_filename_hooks (void);
extern void set_directory_hook (void);
/* Used by programmable completion code. */
$(RM) $@
-${GROFF} -I${srcdir} -man $< > $@
+.1.pdf:
+ $(RM) $@
+ -${GROFF} -I${srcdir} -man -T pdf $< > $@
+
.1.0:
$(RM) $@
-${NROFF} -I${srcdir} -man $< > $@
bashref.ps: bashref.dvi
-article.pdf: article.ps
-#bashref.pdf: bashref.dvi
# experimental
bashref.pdf: bashref.texi
-bash.pdf: bash.ps
+bash.pdf: bash.1
+
+article.pdf: article.ps
rose94.pdf: rose94.ps
OTHER_DOCS = $(srcdir)/FAQ $(srcdir)/INTRO
</HEAD>
<BODY><TABLE WIDTH=100%>
<TR>
-<TH ALIGN=LEFT width=33%>BASH(1)<TH ALIGN=CENTER width=33%>2023 July 7<TH ALIGN=RIGHT width=33%>BASH(1)
+<TH ALIGN=LEFT width=33%>BASH(1)<TH ALIGN=CENTER width=33%>2023 July 19<TH ALIGN=RIGHT width=33%>BASH(1)
</TR>
</TABLE>
<BR><A HREF="#index">Index</A>
<DT><B>bind-tty-special-chars (On)</B>
<DD>
-If set to <B>On</B>, readline attempts to bind the control characters
-treated specially by the kernel's terminal driver to their readline
-equivalents.
+If set to <B>On</B> (the default), readline attempts to bind the control
+characters that are
+treated specially by the kernel's terminal driver to their
+readline equivalents.
+These override the default readline bindings described here.
+Type <TT>stty -a</TT> at a bash prompt to see your current terminal settings,
+including the special control characters (usually <B>cchars</B>).
<DT><B>blink-matching-paren (Off)</B>
<DD>
<DT><B>set</B> [<B>-abefhkmnptuvxBCEHPT</B>] [<B>-o</B> <I>option-name</I>] [<B>--</B>] [<B>-</B>] [<I>arg</I> ...]<DD>
<DT><B>set</B> [<B>+abefhkmnptuvxBCEHPT</B>] [<B>+o</B> <I>option-name</I>] [<B>--</B>] [<B>-</B>] [<I>arg</I> ...]<DD>
+<DT><B>set -o</B><DD>
+<DT><B>set +o</B><DD>
Without options, display the name and value of each shell variable
in a format that can be reused as input
If
<B>-o</B>
-is supplied with no <I>option-name</I>, the values of the current options are
-printed.
+is supplied with no <I>option-name</I>,
+<B>set</B> prints the current shell option settings.
If
<B>+o</B>
-is supplied with no <I>option-name</I>, a series of
+is supplied with no <I>option-name</I>,
+<B>set</B> prints a series of
<B>set</B>
-commands to recreate the current option settings is displayed on
-the standard output.
+commands to recreate the current option settings
+on the standard output.
</DL>
<DT><B>-p</B>
<HR>
<TABLE WIDTH=100%>
<TR>
-<TH ALIGN=LEFT width=33%>GNU Bash 5.3<TH ALIGN=CENTER width=33%>2023 July 7<TH ALIGN=RIGHT width=33%>BASH(1)
+<TH ALIGN=LEFT width=33%>GNU Bash 5.3<TH ALIGN=CENTER width=33%>2023 July 19<TH ALIGN=RIGHT width=33%>BASH(1)
</TR>
</TABLE>
<HR>
<DT><A HREF="#lbDI">BUGS</A><DD>
</DL>
<HR>
-This document was created by man2html from /usr/local/src/bash/bash-20230705/doc/bash.1.<BR>
-Time: 07 July 2023 16:22:29 EDT
+This document was created by man2html from /usr/local/src/bash/bash-20230719/doc/bash.1.<BR>
+Time: 23 July 2023 18:17:35 EDT
</BODY>
</HTML>
@xrdef{The Set Builtin-pg}{68}
@xrdef{The Shopt Builtin-title}{The Shopt Builtin}
@xrdef{The Shopt Builtin-snt}{Section@tie 4.3.2}
-@xrdef{The Shopt Builtin-pg}{72}
+@xrdef{The Shopt Builtin-pg}{73}
@xrdef{Special Builtins-title}{Special Builtins}
@xrdef{Special Builtins-snt}{Section@tie 4.4}
@xrdef{Special Builtins-pg}{79}
@xrdef{Conditional Init Constructs-pg}{133}
@xrdef{Sample Init File-title}{Sample Init File}
@xrdef{Sample Init File-snt}{Section@tie 8.3.3}
-@xrdef{Sample Init File-pg}{134}
+@xrdef{Sample Init File-pg}{135}
@xrdef{Bindable Readline Commands-title}{Bindable Readline Commands}
@xrdef{Bindable Readline Commands-snt}{Section@tie 8.4}
@xrdef{Commands For Moving-title}{Commands For Moving}
@xrdef{Commands For Moving-snt}{Section@tie 8.4.1}
-@xrdef{Bindable Readline Commands-pg}{137}
-@xrdef{Commands For Moving-pg}{137}
+@xrdef{Bindable Readline Commands-pg}{138}
+@xrdef{Commands For Moving-pg}{138}
@xrdef{Commands For History-title}{Commands For Manipulating The History}
@xrdef{Commands For History-snt}{Section@tie 8.4.2}
-@xrdef{Commands For History-pg}{138}
+@xrdef{Commands For History-pg}{139}
@xrdef{Commands For Text-title}{Commands For Changing Text}
@xrdef{Commands For Text-snt}{Section@tie 8.4.3}
-@xrdef{Commands For Text-pg}{140}
+@xrdef{Commands For Text-pg}{141}
@xrdef{Commands For Killing-title}{Killing And Yanking}
@xrdef{Commands For Killing-snt}{Section@tie 8.4.4}
-@xrdef{Commands For Killing-pg}{141}
+@xrdef{Commands For Killing-pg}{142}
@xrdef{Numeric Arguments-title}{Specifying Numeric Arguments}
@xrdef{Numeric Arguments-snt}{Section@tie 8.4.5}
-@xrdef{Numeric Arguments-pg}{142}
+@xrdef{Numeric Arguments-pg}{143}
@xrdef{Commands For Completion-title}{Letting Readline Type For You}
@xrdef{Commands For Completion-snt}{Section@tie 8.4.6}
-@xrdef{Commands For Completion-pg}{143}
+@xrdef{Commands For Completion-pg}{144}
@xrdef{Keyboard Macros-title}{Keyboard Macros}
@xrdef{Keyboard Macros-snt}{Section@tie 8.4.7}
-@xrdef{Keyboard Macros-pg}{144}
+@xrdef{Keyboard Macros-pg}{145}
@xrdef{Miscellaneous Commands-title}{Some Miscellaneous Commands}
@xrdef{Miscellaneous Commands-snt}{Section@tie 8.4.8}
-@xrdef{Miscellaneous Commands-pg}{145}
+@xrdef{Miscellaneous Commands-pg}{146}
@xrdef{Readline vi Mode-title}{Readline vi Mode}
@xrdef{Readline vi Mode-snt}{Section@tie 8.5}
@xrdef{Programmable Completion-title}{Programmable Completion}
@xrdef{Programmable Completion-snt}{Section@tie 8.6}
-@xrdef{Readline vi Mode-pg}{147}
-@xrdef{Programmable Completion-pg}{147}
+@xrdef{Readline vi Mode-pg}{148}
+@xrdef{Programmable Completion-pg}{148}
@xrdef{Programmable Completion Builtins-title}{Programmable Completion Builtins}
@xrdef{Programmable Completion Builtins-snt}{Section@tie 8.7}
-@xrdef{Programmable Completion Builtins-pg}{150}
+@xrdef{Programmable Completion Builtins-pg}{151}
@xrdef{A Programmable Completion Example-title}{A Programmable Completion Example}
@xrdef{A Programmable Completion Example-snt}{Section@tie 8.8}
-@xrdef{A Programmable Completion Example-pg}{154}
+@xrdef{A Programmable Completion Example-pg}{155}
@xrdef{Using History Interactively-title}{Using History Interactively}
@xrdef{Using History Interactively-snt}{Chapter@tie 9}
@xrdef{Bash History Facilities-title}{Bash History Facilities}
@xrdef{Bash History Facilities-snt}{Section@tie 9.1}
@xrdef{Bash History Builtins-title}{Bash History Builtins}
@xrdef{Bash History Builtins-snt}{Section@tie 9.2}
-@xrdef{Using History Interactively-pg}{157}
-@xrdef{Bash History Facilities-pg}{157}
-@xrdef{Bash History Builtins-pg}{157}
+@xrdef{Using History Interactively-pg}{158}
+@xrdef{Bash History Facilities-pg}{158}
+@xrdef{Bash History Builtins-pg}{158}
@xrdef{History Interaction-title}{History Expansion}
@xrdef{History Interaction-snt}{Section@tie 9.3}
-@xrdef{History Interaction-pg}{159}
+@xrdef{History Interaction-pg}{160}
@xrdef{Event Designators-title}{Event Designators}
@xrdef{Event Designators-snt}{Section@tie 9.3.1}
-@xrdef{Event Designators-pg}{160}
+@xrdef{Event Designators-pg}{161}
@xrdef{Word Designators-title}{Word Designators}
@xrdef{Word Designators-snt}{Section@tie 9.3.2}
@xrdef{Modifiers-title}{Modifiers}
@xrdef{Modifiers-snt}{Section@tie 9.3.3}
-@xrdef{Word Designators-pg}{161}
-@xrdef{Modifiers-pg}{161}
+@xrdef{Word Designators-pg}{162}
+@xrdef{Modifiers-pg}{162}
@xrdef{Installing Bash-title}{Installing Bash}
@xrdef{Installing Bash-snt}{Chapter@tie 10}
@xrdef{Basic Installation-title}{Basic Installation}
@xrdef{Basic Installation-snt}{Section@tie 10.1}
-@xrdef{Installing Bash-pg}{163}
-@xrdef{Basic Installation-pg}{163}
+@xrdef{Installing Bash-pg}{164}
+@xrdef{Basic Installation-pg}{164}
@xrdef{Compilers and Options-title}{Compilers and Options}
@xrdef{Compilers and Options-snt}{Section@tie 10.2}
@xrdef{Compiling For Multiple Architectures-title}{Compiling For Multiple Architectures}
@xrdef{Compiling For Multiple Architectures-snt}{Section@tie 10.3}
@xrdef{Installation Names-title}{Installation Names}
@xrdef{Installation Names-snt}{Section@tie 10.4}
-@xrdef{Compilers and Options-pg}{164}
-@xrdef{Compiling For Multiple Architectures-pg}{164}
+@xrdef{Compilers and Options-pg}{165}
+@xrdef{Compiling For Multiple Architectures-pg}{165}
@xrdef{Specifying the System Type-title}{Specifying the System Type}
@xrdef{Specifying the System Type-snt}{Section@tie 10.5}
@xrdef{Sharing Defaults-title}{Sharing Defaults}
@xrdef{Sharing Defaults-snt}{Section@tie 10.6}
@xrdef{Operation Controls-title}{Operation Controls}
@xrdef{Operation Controls-snt}{Section@tie 10.7}
-@xrdef{Installation Names-pg}{165}
-@xrdef{Specifying the System Type-pg}{165}
-@xrdef{Sharing Defaults-pg}{165}
+@xrdef{Installation Names-pg}{166}
+@xrdef{Specifying the System Type-pg}{166}
+@xrdef{Sharing Defaults-pg}{166}
@xrdef{Optional Features-title}{Optional Features}
@xrdef{Optional Features-snt}{Section@tie 10.8}
-@xrdef{Operation Controls-pg}{166}
-@xrdef{Optional Features-pg}{166}
+@xrdef{Operation Controls-pg}{167}
+@xrdef{Optional Features-pg}{167}
@xrdef{Reporting Bugs-title}{Reporting Bugs}
@xrdef{Reporting Bugs-snt}{Appendix@tie @char65{}}
-@xrdef{Reporting Bugs-pg}{172}
+@xrdef{Reporting Bugs-pg}{173}
@xrdef{Major Differences From The Bourne Shell-title}{Major Differences From The Bourne Shell}
@xrdef{Major Differences From The Bourne Shell-snt}{Appendix@tie @char66{}}
-@xrdef{Major Differences From The Bourne Shell-pg}{173}
+@xrdef{Major Differences From The Bourne Shell-pg}{174}
@xrdef{GNU Free Documentation License-title}{GNU Free Documentation License}
@xrdef{GNU Free Documentation License-snt}{Appendix@tie @char67{}}
-@xrdef{GNU Free Documentation License-pg}{179}
+@xrdef{GNU Free Documentation License-pg}{180}
@xrdef{Indexes-title}{Indexes}
@xrdef{Indexes-snt}{Appendix@tie @char68{}}
@xrdef{Builtin Index-title}{Index of Shell Builtin Commands}
@xrdef{Builtin Index-snt}{Section@tie @char68.1}
-@xrdef{Indexes-pg}{187}
-@xrdef{Builtin Index-pg}{187}
+@xrdef{Indexes-pg}{188}
+@xrdef{Builtin Index-pg}{188}
@xrdef{Reserved Word Index-title}{Index of Shell Reserved Words}
@xrdef{Reserved Word Index-snt}{Section@tie @char68.2}
@xrdef{Variable Index-title}{Parameter and Variable Index}
@xrdef{Variable Index-snt}{Section@tie @char68.3}
-@xrdef{Reserved Word Index-pg}{188}
-@xrdef{Variable Index-pg}{189}
+@xrdef{Reserved Word Index-pg}{189}
+@xrdef{Variable Index-pg}{190}
@xrdef{Function Index-title}{Function Index}
@xrdef{Function Index-snt}{Section@tie @char68.4}
-@xrdef{Function Index-pg}{191}
+@xrdef{Function Index-pg}{192}
@xrdef{Concept Index-title}{Concept Index}
@xrdef{Concept Index-snt}{Section@tie @char68.5}
-@xrdef{Concept Index-pg}{193}
+@xrdef{Concept Index-pg}{194}
\entry{trap}{55}{\code {trap}}
\entry{true}{56}{\code {true}}
\entry{umask}{56}{\code {umask}}
-\entry{unset}{56}{\code {unset}}
+\entry{unset}{57}{\code {unset}}
\entry{alias}{57}{\code {alias}}
\entry{bind}{57}{\code {bind}}
\entry{builtin}{58}{\code {builtin}}
-\entry{caller}{58}{\code {caller}}
+\entry{caller}{59}{\code {caller}}
\entry{command}{59}{\code {command}}
\entry{declare}{59}{\code {declare}}
-\entry{echo}{60}{\code {echo}}
-\entry{enable}{61}{\code {enable}}
+\entry{echo}{61}{\code {echo}}
+\entry{enable}{62}{\code {enable}}
\entry{help}{62}{\code {help}}
\entry{let}{62}{\code {let}}
-\entry{local}{62}{\code {local}}
+\entry{local}{63}{\code {local}}
\entry{logout}{63}{\code {logout}}
\entry{mapfile}{63}{\code {mapfile}}
-\entry{printf}{63}{\code {printf}}
-\entry{read}{64}{\code {read}}
+\entry{printf}{64}{\code {printf}}
+\entry{read}{65}{\code {read}}
\entry{readarray}{66}{\code {readarray}}
\entry{source}{66}{\code {source}}
\entry{type}{66}{\code {type}}
\entry{ulimit}{67}{\code {ulimit}}
\entry{unalias}{68}{\code {unalias}}
\entry{set}{68}{\code {set}}
-\entry{shopt}{72}{\code {shopt}}
+\entry{shopt}{73}{\code {shopt}}
\entry{dirs}{105}{\code {dirs}}
\entry{popd}{105}{\code {popd}}
\entry{pushd}{105}{\code {pushd}}
\entry{wait}{119}{\code {wait}}
\entry{disown}{120}{\code {disown}}
\entry{suspend}{120}{\code {suspend}}
-\entry{compgen}{150}{\code {compgen}}
-\entry{complete}{150}{\code {complete}}
-\entry{compopt}{153}{\code {compopt}}
-\entry{fc}{158}{\code {fc}}
-\entry{history}{158}{\code {history}}
+\entry{compgen}{151}{\code {compgen}}
+\entry{complete}{151}{\code {complete}}
+\entry{compopt}{154}{\code {compopt}}
+\entry{fc}{159}{\code {fc}}
+\entry{history}{159}{\code {history}}
\entry{\code {break}}{50}
\entry{\code {builtin}}{58}
\initial {C}
-\entry{\code {caller}}{58}
+\entry{\code {caller}}{59}
\entry{\code {cd}}{50}
\entry{\code {command}}{59}
-\entry{\code {compgen}}{150}
-\entry{\code {complete}}{150}
-\entry{\code {compopt}}{153}
+\entry{\code {compgen}}{151}
+\entry{\code {complete}}{151}
+\entry{\code {compopt}}{154}
\entry{\code {continue}}{50}
\initial {D}
\entry{\code {declare}}{59}
\entry{\code {dirs}}{105}
\entry{\code {disown}}{120}
\initial {E}
-\entry{\code {echo}}{60}
-\entry{\code {enable}}{61}
+\entry{\code {echo}}{61}
+\entry{\code {enable}}{62}
\entry{\code {eval}}{50}
\entry{\code {exec}}{51}
\entry{\code {exit}}{51}
\entry{\code {export}}{51}
\initial {F}
\entry{\code {false}}{51}
-\entry{\code {fc}}{158}
+\entry{\code {fc}}{159}
\entry{\code {fg}}{118}
\initial {G}
\entry{\code {getopts}}{51}
\initial {H}
\entry{\code {hash}}{52}
\entry{\code {help}}{62}
-\entry{\code {history}}{158}
+\entry{\code {history}}{159}
\initial {J}
\entry{\code {jobs}}{118}
\initial {K}
\entry{\code {kill}}{119}
\initial {L}
\entry{\code {let}}{62}
-\entry{\code {local}}{62}
+\entry{\code {local}}{63}
\entry{\code {logout}}{63}
\initial {M}
\entry{\code {mapfile}}{63}
\initial {P}
\entry{\code {popd}}{105}
-\entry{\code {printf}}{63}
+\entry{\code {printf}}{64}
\entry{\code {pushd}}{105}
\entry{\code {pwd}}{52}
\initial {R}
-\entry{\code {read}}{64}
+\entry{\code {read}}{65}
\entry{\code {readarray}}{66}
\entry{\code {readonly}}{53}
\entry{\code {return}}{53}
\initial {S}
\entry{\code {set}}{68}
\entry{\code {shift}}{53}
-\entry{\code {shopt}}{72}
+\entry{\code {shopt}}{73}
\entry{\code {source}}{66}
\entry{\code {suspend}}{120}
\initial {T}
\entry{\code {ulimit}}{67}
\entry{\code {umask}}{56}
\entry{\code {unalias}}{68}
-\entry{\code {unset}}{56}
+\entry{\code {unset}}{57}
\initial {W}
\entry{\code {wait}}{119}
\entry{kill ring}{123}{kill ring}
\entry{initialization file, readline}{124}{initialization file, readline}
\entry{variables, readline}{125}{variables, readline}
-\entry{programmable completion}{147}{programmable completion}
-\entry{completion builtins}{150}{completion builtins}
-\entry{History, how to use}{156}{History, how to use}
-\entry{command history}{157}{command history}
-\entry{history list}{157}{history list}
-\entry{history builtins}{157}{history builtins}
-\entry{history expansion}{159}{history expansion}
-\entry{event designators}{160}{event designators}
-\entry{history events}{160}{history events}
-\entry{installation}{163}{installation}
-\entry{configuration}{163}{configuration}
-\entry{Bash installation}{163}{Bash installation}
-\entry{Bash configuration}{163}{Bash configuration}
+\entry{programmable completion}{148}{programmable completion}
+\entry{completion builtins}{151}{completion builtins}
+\entry{History, how to use}{157}{History, how to use}
+\entry{command history}{158}{command history}
+\entry{history list}{158}{history list}
+\entry{history builtins}{158}{history builtins}
+\entry{history expansion}{160}{history expansion}
+\entry{event designators}{161}{event designators}
+\entry{history events}{161}{history events}
+\entry{installation}{164}{installation}
+\entry{configuration}{164}{configuration}
+\entry{Bash installation}{164}{Bash installation}
+\entry{Bash configuration}{164}{Bash configuration}
\entry{arrays}{102}
\initial {B}
\entry{background}{117}
-\entry{Bash configuration}{163}
-\entry{Bash installation}{163}
+\entry{Bash configuration}{164}
+\entry{Bash installation}{164}
\entry{binary arithmetic operators}{100}
\entry{bitwise arithmetic operators}{100}
\entry{Bourne shell}{5}
\entry{command editing}{122}
\entry{command execution}{43}
\entry{command expansion}{43}
-\entry{command history}{157}
+\entry{command history}{158}
\entry{command search}{43}
\entry{command substitution}{34}
\entry{command timing}{10}
\entry{comments, shell}{9}
\entry{Compatibility Level}{113}
\entry{Compatibility Mode}{113}
-\entry{completion builtins}{150}
+\entry{completion builtins}{151}
\entry{conditional arithmetic operator}{100}
-\entry{configuration}{163}
+\entry{configuration}{164}
\entry{control operator}{3}
\entry{coprocess}{18}
\initial {D}
\entry{editing command lines}{122}
\entry{environment}{45}
\entry{evaluation, arithmetic}{100}
-\entry{event designators}{160}
+\entry{event designators}{161}
\entry{execution environment}{44}
\entry{exit status}{3, 45}
\entry{expansion}{24}
\entry{foreground}{117}
\entry{functions, shell}{19}
\initial {H}
-\entry{history builtins}{157}
-\entry{history events}{160}
-\entry{history expansion}{159}
-\entry{history list}{157}
-\entry{History, how to use}{156}
+\entry{history builtins}{158}
+\entry{history events}{161}
+\entry{history expansion}{160}
+\entry{history list}{158}
+\entry{History, how to use}{157}
\initial {I}
\entry{identifier}{3}
\entry{initialization file, readline}{124}
-\entry{installation}{163}
+\entry{installation}{164}
\entry{interaction, readline}{121}
\entry{interactive shell}{95, 96}
\entry{internationalization}{7}
\entry{process group}{3}
\entry{process group ID}{3}
\entry{process substitution}{35}
-\entry{programmable completion}{147}
+\entry{programmable completion}{148}
\entry{prompting}{106}
\initial {Q}
\entry{quoting}{6}
-\entry{beginning-of-line (C-a)}{137}{\code {beginning-of-line (C-a)}}
-\entry{end-of-line (C-e)}{137}{\code {end-of-line (C-e)}}
-\entry{forward-char (C-f)}{137}{\code {forward-char (C-f)}}
-\entry{backward-char (C-b)}{137}{\code {backward-char (C-b)}}
-\entry{forward-word (M-f)}{137}{\code {forward-word (M-f)}}
-\entry{backward-word (M-b)}{137}{\code {backward-word (M-b)}}
-\entry{shell-forward-word (M-C-f)}{137}{\code {shell-forward-word (M-C-f)}}
-\entry{shell-backward-word (M-C-b)}{137}{\code {shell-backward-word (M-C-b)}}
-\entry{previous-screen-line ()}{137}{\code {previous-screen-line ()}}
-\entry{next-screen-line ()}{138}{\code {next-screen-line ()}}
-\entry{clear-display (M-C-l)}{138}{\code {clear-display (M-C-l)}}
-\entry{clear-screen (C-l)}{138}{\code {clear-screen (C-l)}}
-\entry{redraw-current-line ()}{138}{\code {redraw-current-line ()}}
-\entry{accept-line (Newline or Return)}{138}{\code {accept-line (Newline or Return)}}
-\entry{previous-history (C-p)}{138}{\code {previous-history (C-p)}}
-\entry{next-history (C-n)}{138}{\code {next-history (C-n)}}
-\entry{beginning-of-history (M-<)}{138}{\code {beginning-of-history (M-<)}}
-\entry{end-of-history (M->)}{138}{\code {end-of-history (M->)}}
-\entry{reverse-search-history (C-r)}{138}{\code {reverse-search-history (C-r)}}
-\entry{forward-search-history (C-s)}{138}{\code {forward-search-history (C-s)}}
-\entry{non-incremental-reverse-search-history (M-p)}{138}{\code {non-incremental-reverse-search-history (M-p)}}
-\entry{non-incremental-forward-search-history (M-n)}{139}{\code {non-incremental-forward-search-history (M-n)}}
-\entry{history-search-forward ()}{139}{\code {history-search-forward ()}}
-\entry{history-search-backward ()}{139}{\code {history-search-backward ()}}
-\entry{history-substring-search-forward ()}{139}{\code {history-substring-search-forward ()}}
-\entry{history-substring-search-backward ()}{139}{\code {history-substring-search-backward ()}}
-\entry{yank-nth-arg (M-C-y)}{139}{\code {yank-nth-arg (M-C-y)}}
-\entry{yank-last-arg (M-. or M-_)}{139}{\code {yank-last-arg (M-. or M-_)}}
-\entry{operate-and-get-next (C-o)}{139}{\code {operate-and-get-next (C-o)}}
-\entry{fetch-history ()}{140}{\code {fetch-history ()}}
-\entry{end-of-file (usually C-d)}{140}{\code {\i {end-of-file} (usually C-d)}}
-\entry{delete-char (C-d)}{140}{\code {delete-char (C-d)}}
-\entry{backward-delete-char (Rubout)}{140}{\code {backward-delete-char (Rubout)}}
-\entry{forward-backward-delete-char ()}{140}{\code {forward-backward-delete-char ()}}
-\entry{quoted-insert (C-q or C-v)}{140}{\code {quoted-insert (C-q or C-v)}}
-\entry{self-insert (a, b, A, 1, !, ...{})}{140}{\code {self-insert (a, b, A, 1, !, \dots {})}}
-\entry{bracketed-paste-begin ()}{140}{\code {bracketed-paste-begin ()}}
-\entry{transpose-chars (C-t)}{140}{\code {transpose-chars (C-t)}}
-\entry{transpose-words (M-t)}{141}{\code {transpose-words (M-t)}}
-\entry{upcase-word (M-u)}{141}{\code {upcase-word (M-u)}}
-\entry{downcase-word (M-l)}{141}{\code {downcase-word (M-l)}}
-\entry{capitalize-word (M-c)}{141}{\code {capitalize-word (M-c)}}
-\entry{overwrite-mode ()}{141}{\code {overwrite-mode ()}}
-\entry{kill-line (C-k)}{141}{\code {kill-line (C-k)}}
-\entry{backward-kill-line (C-x Rubout)}{141}{\code {backward-kill-line (C-x Rubout)}}
-\entry{unix-line-discard (C-u)}{141}{\code {unix-line-discard (C-u)}}
-\entry{kill-whole-line ()}{141}{\code {kill-whole-line ()}}
-\entry{kill-word (M-d)}{141}{\code {kill-word (M-d)}}
-\entry{backward-kill-word (M-DEL)}{141}{\code {backward-kill-word (M-\key {DEL})}}
-\entry{shell-kill-word (M-C-d)}{142}{\code {shell-kill-word (M-C-d)}}
-\entry{shell-backward-kill-word ()}{142}{\code {shell-backward-kill-word ()}}
+\entry{beginning-of-line (C-a)}{138}{\code {beginning-of-line (C-a)}}
+\entry{end-of-line (C-e)}{138}{\code {end-of-line (C-e)}}
+\entry{forward-char (C-f)}{138}{\code {forward-char (C-f)}}
+\entry{backward-char (C-b)}{138}{\code {backward-char (C-b)}}
+\entry{forward-word (M-f)}{138}{\code {forward-word (M-f)}}
+\entry{backward-word (M-b)}{138}{\code {backward-word (M-b)}}
+\entry{shell-forward-word (M-C-f)}{138}{\code {shell-forward-word (M-C-f)}}
+\entry{shell-backward-word (M-C-b)}{138}{\code {shell-backward-word (M-C-b)}}
+\entry{previous-screen-line ()}{138}{\code {previous-screen-line ()}}
+\entry{next-screen-line ()}{139}{\code {next-screen-line ()}}
+\entry{clear-display (M-C-l)}{139}{\code {clear-display (M-C-l)}}
+\entry{clear-screen (C-l)}{139}{\code {clear-screen (C-l)}}
+\entry{redraw-current-line ()}{139}{\code {redraw-current-line ()}}
+\entry{accept-line (Newline or Return)}{139}{\code {accept-line (Newline or Return)}}
+\entry{previous-history (C-p)}{139}{\code {previous-history (C-p)}}
+\entry{next-history (C-n)}{139}{\code {next-history (C-n)}}
+\entry{beginning-of-history (M-<)}{139}{\code {beginning-of-history (M-<)}}
+\entry{end-of-history (M->)}{139}{\code {end-of-history (M->)}}
+\entry{reverse-search-history (C-r)}{139}{\code {reverse-search-history (C-r)}}
+\entry{forward-search-history (C-s)}{139}{\code {forward-search-history (C-s)}}
+\entry{non-incremental-reverse-search-history (M-p)}{139}{\code {non-incremental-reverse-search-history (M-p)}}
+\entry{non-incremental-forward-search-history (M-n)}{140}{\code {non-incremental-forward-search-history (M-n)}}
+\entry{history-search-forward ()}{140}{\code {history-search-forward ()}}
+\entry{history-search-backward ()}{140}{\code {history-search-backward ()}}
+\entry{history-substring-search-forward ()}{140}{\code {history-substring-search-forward ()}}
+\entry{history-substring-search-backward ()}{140}{\code {history-substring-search-backward ()}}
+\entry{yank-nth-arg (M-C-y)}{140}{\code {yank-nth-arg (M-C-y)}}
+\entry{yank-last-arg (M-. or M-_)}{140}{\code {yank-last-arg (M-. or M-_)}}
+\entry{operate-and-get-next (C-o)}{140}{\code {operate-and-get-next (C-o)}}
+\entry{fetch-history ()}{141}{\code {fetch-history ()}}
+\entry{end-of-file (usually C-d)}{141}{\code {\i {end-of-file} (usually C-d)}}
+\entry{delete-char (C-d)}{141}{\code {delete-char (C-d)}}
+\entry{backward-delete-char (Rubout)}{141}{\code {backward-delete-char (Rubout)}}
+\entry{forward-backward-delete-char ()}{141}{\code {forward-backward-delete-char ()}}
+\entry{quoted-insert (C-q or C-v)}{141}{\code {quoted-insert (C-q or C-v)}}
+\entry{self-insert (a, b, A, 1, !, ...{})}{141}{\code {self-insert (a, b, A, 1, !, \dots {})}}
+\entry{bracketed-paste-begin ()}{141}{\code {bracketed-paste-begin ()}}
+\entry{transpose-chars (C-t)}{141}{\code {transpose-chars (C-t)}}
+\entry{transpose-words (M-t)}{142}{\code {transpose-words (M-t)}}
\entry{shell-transpose-words (M-C-t)}{142}{\code {shell-transpose-words (M-C-t)}}
-\entry{unix-word-rubout (C-w)}{142}{\code {unix-word-rubout (C-w)}}
-\entry{unix-filename-rubout ()}{142}{\code {unix-filename-rubout ()}}
-\entry{delete-horizontal-space ()}{142}{\code {delete-horizontal-space ()}}
-\entry{kill-region ()}{142}{\code {kill-region ()}}
-\entry{copy-region-as-kill ()}{142}{\code {copy-region-as-kill ()}}
-\entry{copy-backward-word ()}{142}{\code {copy-backward-word ()}}
-\entry{copy-forward-word ()}{142}{\code {copy-forward-word ()}}
-\entry{yank (C-y)}{142}{\code {yank (C-y)}}
-\entry{yank-pop (M-y)}{142}{\code {yank-pop (M-y)}}
-\entry{digit-argument (M-0, M-1, ...{} M--)}{142}{\code {digit-argument (\kbd {M-0}, \kbd {M-1}, \dots {} \kbd {M--})}}
-\entry{universal-argument ()}{143}{\code {universal-argument ()}}
-\entry{complete (TAB)}{143}{\code {complete (\key {TAB})}}
-\entry{possible-completions (M-?)}{143}{\code {possible-completions (M-?)}}
-\entry{insert-completions (M-*)}{143}{\code {insert-completions (M-*)}}
-\entry{menu-complete ()}{143}{\code {menu-complete ()}}
-\entry{menu-complete-backward ()}{143}{\code {menu-complete-backward ()}}
-\entry{delete-char-or-list ()}{143}{\code {delete-char-or-list ()}}
-\entry{complete-filename (M-/)}{143}{\code {complete-filename (M-/)}}
-\entry{possible-filename-completions (C-x /)}{144}{\code {possible-filename-completions (C-x /)}}
-\entry{complete-username (M-~)}{144}{\code {complete-username (M-~)}}
-\entry{possible-username-completions (C-x ~)}{144}{\code {possible-username-completions (C-x ~)}}
-\entry{complete-variable (M-$)}{144}{\code {complete-variable (M-$)}}
-\entry{possible-variable-completions (C-x $)}{144}{\code {possible-variable-completions (C-x $)}}
-\entry{complete-hostname (M-@)}{144}{\code {complete-hostname (M-@)}}
-\entry{possible-hostname-completions (C-x @)}{144}{\code {possible-hostname-completions (C-x @)}}
-\entry{complete-command (M-!)}{144}{\code {complete-command (M-!)}}
-\entry{possible-command-completions (C-x !)}{144}{\code {possible-command-completions (C-x !)}}
-\entry{dynamic-complete-history (M-TAB)}{144}{\code {dynamic-complete-history (M-\key {TAB})}}
-\entry{dabbrev-expand ()}{144}{\code {dabbrev-expand ()}}
-\entry{complete-into-braces (M-{\indexlbrace })}{144}{\code {complete-into-braces (M-{\tt \char 123})}}
-\entry{start-kbd-macro (C-x ()}{144}{\code {start-kbd-macro (C-x ()}}
-\entry{end-kbd-macro (C-x ))}{144}{\code {end-kbd-macro (C-x ))}}
-\entry{call-last-kbd-macro (C-x e)}{145}{\code {call-last-kbd-macro (C-x e)}}
-\entry{print-last-kbd-macro ()}{145}{\code {print-last-kbd-macro ()}}
-\entry{re-read-init-file (C-x C-r)}{145}{\code {re-read-init-file (C-x C-r)}}
-\entry{abort (C-g)}{145}{\code {abort (C-g)}}
-\entry{do-lowercase-version (M-A, M-B, M-x, ...{})}{145}{\code {do-lowercase-version (M-A, M-B, M-\var {x}, \dots {})}}
-\entry{prefix-meta (ESC)}{145}{\code {prefix-meta (\key {ESC})}}
-\entry{undo (C-_ or C-x C-u)}{145}{\code {undo (C-_ or C-x C-u)}}
-\entry{revert-line (M-r)}{145}{\code {revert-line (M-r)}}
-\entry{tilde-expand (M-&)}{145}{\code {tilde-expand (M-&)}}
-\entry{set-mark (C-@)}{145}{\code {set-mark (C-@)}}
-\entry{exchange-point-and-mark (C-x C-x)}{145}{\code {exchange-point-and-mark (C-x C-x)}}
-\entry{character-search (C-])}{145}{\code {character-search (C-])}}
-\entry{character-search-backward (M-C-])}{145}{\code {character-search-backward (M-C-])}}
-\entry{skip-csi-sequence ()}{145}{\code {skip-csi-sequence ()}}
-\entry{insert-comment (M-#)}{146}{\code {insert-comment (M-#)}}
-\entry{dump-functions ()}{146}{\code {dump-functions ()}}
-\entry{dump-variables ()}{146}{\code {dump-variables ()}}
-\entry{dump-macros ()}{146}{\code {dump-macros ()}}
-\entry{spell-correct-word (C-x s)}{146}{\code {spell-correct-word (C-x s)}}
-\entry{glob-complete-word (M-g)}{146}{\code {glob-complete-word (M-g)}}
-\entry{glob-expand-word (C-x *)}{146}{\code {glob-expand-word (C-x *)}}
-\entry{glob-list-expansions (C-x g)}{146}{\code {glob-list-expansions (C-x g)}}
-\entry{display-shell-version (C-x C-v)}{147}{\code {display-shell-version (C-x C-v)}}
-\entry{shell-expand-line (M-C-e)}{147}{\code {shell-expand-line (M-C-e)}}
-\entry{history-expand-line (M-^)}{147}{\code {history-expand-line (M-^)}}
-\entry{magic-space ()}{147}{\code {magic-space ()}}
-\entry{alias-expand-line ()}{147}{\code {alias-expand-line ()}}
-\entry{history-and-alias-expand-line ()}{147}{\code {history-and-alias-expand-line ()}}
-\entry{insert-last-argument (M-. or M-_)}{147}{\code {insert-last-argument (M-. or M-_)}}
-\entry{edit-and-execute-command (C-x C-e)}{147}{\code {edit-and-execute-command (C-x C-e)}}
+\entry{upcase-word (M-u)}{142}{\code {upcase-word (M-u)}}
+\entry{downcase-word (M-l)}{142}{\code {downcase-word (M-l)}}
+\entry{capitalize-word (M-c)}{142}{\code {capitalize-word (M-c)}}
+\entry{overwrite-mode ()}{142}{\code {overwrite-mode ()}}
+\entry{kill-line (C-k)}{142}{\code {kill-line (C-k)}}
+\entry{backward-kill-line (C-x Rubout)}{142}{\code {backward-kill-line (C-x Rubout)}}
+\entry{unix-line-discard (C-u)}{142}{\code {unix-line-discard (C-u)}}
+\entry{kill-whole-line ()}{142}{\code {kill-whole-line ()}}
+\entry{kill-word (M-d)}{143}{\code {kill-word (M-d)}}
+\entry{backward-kill-word (M-DEL)}{143}{\code {backward-kill-word (M-\key {DEL})}}
+\entry{shell-kill-word (M-C-d)}{143}{\code {shell-kill-word (M-C-d)}}
+\entry{shell-backward-kill-word ()}{143}{\code {shell-backward-kill-word ()}}
+\entry{unix-word-rubout (C-w)}{143}{\code {unix-word-rubout (C-w)}}
+\entry{unix-filename-rubout ()}{143}{\code {unix-filename-rubout ()}}
+\entry{delete-horizontal-space ()}{143}{\code {delete-horizontal-space ()}}
+\entry{kill-region ()}{143}{\code {kill-region ()}}
+\entry{copy-region-as-kill ()}{143}{\code {copy-region-as-kill ()}}
+\entry{copy-backward-word ()}{143}{\code {copy-backward-word ()}}
+\entry{copy-forward-word ()}{143}{\code {copy-forward-word ()}}
+\entry{yank (C-y)}{143}{\code {yank (C-y)}}
+\entry{yank-pop (M-y)}{143}{\code {yank-pop (M-y)}}
+\entry{digit-argument (M-0, M-1, ...{} M--)}{143}{\code {digit-argument (\kbd {M-0}, \kbd {M-1}, \dots {} \kbd {M--})}}
+\entry{universal-argument ()}{144}{\code {universal-argument ()}}
+\entry{complete (TAB)}{144}{\code {complete (\key {TAB})}}
+\entry{possible-completions (M-?)}{144}{\code {possible-completions (M-?)}}
+\entry{insert-completions (M-*)}{144}{\code {insert-completions (M-*)}}
+\entry{menu-complete ()}{144}{\code {menu-complete ()}}
+\entry{menu-complete-backward ()}{144}{\code {menu-complete-backward ()}}
+\entry{delete-char-or-list ()}{144}{\code {delete-char-or-list ()}}
+\entry{complete-filename (M-/)}{144}{\code {complete-filename (M-/)}}
+\entry{possible-filename-completions (C-x /)}{145}{\code {possible-filename-completions (C-x /)}}
+\entry{complete-username (M-~)}{145}{\code {complete-username (M-~)}}
+\entry{possible-username-completions (C-x ~)}{145}{\code {possible-username-completions (C-x ~)}}
+\entry{complete-variable (M-$)}{145}{\code {complete-variable (M-$)}}
+\entry{possible-variable-completions (C-x $)}{145}{\code {possible-variable-completions (C-x $)}}
+\entry{complete-hostname (M-@)}{145}{\code {complete-hostname (M-@)}}
+\entry{possible-hostname-completions (C-x @)}{145}{\code {possible-hostname-completions (C-x @)}}
+\entry{complete-command (M-!)}{145}{\code {complete-command (M-!)}}
+\entry{possible-command-completions (C-x !)}{145}{\code {possible-command-completions (C-x !)}}
+\entry{dynamic-complete-history (M-TAB)}{145}{\code {dynamic-complete-history (M-\key {TAB})}}
+\entry{dabbrev-expand ()}{145}{\code {dabbrev-expand ()}}
+\entry{complete-into-braces (M-{\indexlbrace })}{145}{\code {complete-into-braces (M-{\tt \char 123})}}
+\entry{start-kbd-macro (C-x ()}{145}{\code {start-kbd-macro (C-x ()}}
+\entry{end-kbd-macro (C-x ))}{145}{\code {end-kbd-macro (C-x ))}}
+\entry{call-last-kbd-macro (C-x e)}{146}{\code {call-last-kbd-macro (C-x e)}}
+\entry{print-last-kbd-macro ()}{146}{\code {print-last-kbd-macro ()}}
+\entry{re-read-init-file (C-x C-r)}{146}{\code {re-read-init-file (C-x C-r)}}
+\entry{abort (C-g)}{146}{\code {abort (C-g)}}
+\entry{do-lowercase-version (M-A, M-B, M-x, ...{})}{146}{\code {do-lowercase-version (M-A, M-B, M-\var {x}, \dots {})}}
+\entry{prefix-meta (ESC)}{146}{\code {prefix-meta (\key {ESC})}}
+\entry{undo (C-_ or C-x C-u)}{146}{\code {undo (C-_ or C-x C-u)}}
+\entry{revert-line (M-r)}{146}{\code {revert-line (M-r)}}
+\entry{tilde-expand (M-&)}{146}{\code {tilde-expand (M-&)}}
+\entry{set-mark (C-@)}{146}{\code {set-mark (C-@)}}
+\entry{exchange-point-and-mark (C-x C-x)}{146}{\code {exchange-point-and-mark (C-x C-x)}}
+\entry{character-search (C-])}{146}{\code {character-search (C-])}}
+\entry{character-search-backward (M-C-])}{146}{\code {character-search-backward (M-C-])}}
+\entry{skip-csi-sequence ()}{146}{\code {skip-csi-sequence ()}}
+\entry{insert-comment (M-#)}{147}{\code {insert-comment (M-#)}}
+\entry{dump-functions ()}{147}{\code {dump-functions ()}}
+\entry{dump-variables ()}{147}{\code {dump-variables ()}}
+\entry{dump-macros ()}{147}{\code {dump-macros ()}}
+\entry{spell-correct-word (C-x s)}{147}{\code {spell-correct-word (C-x s)}}
+\entry{glob-complete-word (M-g)}{147}{\code {glob-complete-word (M-g)}}
+\entry{glob-expand-word (C-x *)}{147}{\code {glob-expand-word (C-x *)}}
+\entry{glob-list-expansions (C-x g)}{147}{\code {glob-list-expansions (C-x g)}}
+\entry{display-shell-version (C-x C-v)}{148}{\code {display-shell-version (C-x C-v)}}
+\entry{shell-expand-line (M-C-e)}{148}{\code {shell-expand-line (M-C-e)}}
+\entry{history-expand-line (M-^)}{148}{\code {history-expand-line (M-^)}}
+\entry{magic-space ()}{148}{\code {magic-space ()}}
+\entry{alias-expand-line ()}{148}{\code {alias-expand-line ()}}
+\entry{history-and-alias-expand-line ()}{148}{\code {history-and-alias-expand-line ()}}
+\entry{insert-last-argument (M-. or M-_)}{148}{\code {insert-last-argument (M-. or M-_)}}
+\entry{edit-and-execute-command (C-x C-e)}{148}{\code {edit-and-execute-command (C-x C-e)}}
\initial {A}
-\entry{\code {abort (C-g)}}{145}
-\entry{\code {accept-line (Newline or Return)}}{138}
-\entry{\code {alias-expand-line ()}}{147}
+\entry{\code {abort (C-g)}}{146}
+\entry{\code {accept-line (Newline or Return)}}{139}
+\entry{\code {alias-expand-line ()}}{148}
\initial {B}
-\entry{\code {backward-char (C-b)}}{137}
-\entry{\code {backward-delete-char (Rubout)}}{140}
-\entry{\code {backward-kill-line (C-x Rubout)}}{141}
-\entry{\code {backward-kill-word (M-\key {DEL})}}{141}
-\entry{\code {backward-word (M-b)}}{137}
-\entry{\code {beginning-of-history (M-<)}}{138}
-\entry{\code {beginning-of-line (C-a)}}{137}
-\entry{\code {bracketed-paste-begin ()}}{140}
+\entry{\code {backward-char (C-b)}}{138}
+\entry{\code {backward-delete-char (Rubout)}}{141}
+\entry{\code {backward-kill-line (C-x Rubout)}}{142}
+\entry{\code {backward-kill-word (M-\key {DEL})}}{143}
+\entry{\code {backward-word (M-b)}}{138}
+\entry{\code {beginning-of-history (M-<)}}{139}
+\entry{\code {beginning-of-line (C-a)}}{138}
+\entry{\code {bracketed-paste-begin ()}}{141}
\initial {C}
-\entry{\code {call-last-kbd-macro (C-x e)}}{145}
-\entry{\code {capitalize-word (M-c)}}{141}
-\entry{\code {character-search (C-])}}{145}
-\entry{\code {character-search-backward (M-C-])}}{145}
-\entry{\code {clear-display (M-C-l)}}{138}
-\entry{\code {clear-screen (C-l)}}{138}
-\entry{\code {complete (\key {TAB})}}{143}
-\entry{\code {complete-command (M-!)}}{144}
-\entry{\code {complete-filename (M-/)}}{143}
-\entry{\code {complete-hostname (M-@)}}{144}
-\entry{\code {complete-into-braces (M-{\tt \char 123})}}{144}
-\entry{\code {complete-username (M-~)}}{144}
-\entry{\code {complete-variable (M-$)}}{144}
-\entry{\code {copy-backward-word ()}}{142}
-\entry{\code {copy-forward-word ()}}{142}
-\entry{\code {copy-region-as-kill ()}}{142}
+\entry{\code {call-last-kbd-macro (C-x e)}}{146}
+\entry{\code {capitalize-word (M-c)}}{142}
+\entry{\code {character-search (C-])}}{146}
+\entry{\code {character-search-backward (M-C-])}}{146}
+\entry{\code {clear-display (M-C-l)}}{139}
+\entry{\code {clear-screen (C-l)}}{139}
+\entry{\code {complete (\key {TAB})}}{144}
+\entry{\code {complete-command (M-!)}}{145}
+\entry{\code {complete-filename (M-/)}}{144}
+\entry{\code {complete-hostname (M-@)}}{145}
+\entry{\code {complete-into-braces (M-{\tt \char 123})}}{145}
+\entry{\code {complete-username (M-~)}}{145}
+\entry{\code {complete-variable (M-$)}}{145}
+\entry{\code {copy-backward-word ()}}{143}
+\entry{\code {copy-forward-word ()}}{143}
+\entry{\code {copy-region-as-kill ()}}{143}
\initial {D}
-\entry{\code {dabbrev-expand ()}}{144}
-\entry{\code {delete-char (C-d)}}{140}
-\entry{\code {delete-char-or-list ()}}{143}
-\entry{\code {delete-horizontal-space ()}}{142}
-\entry{\code {digit-argument (\kbd {M-0}, \kbd {M-1}, \dots {} \kbd {M--})}}{142}
-\entry{\code {display-shell-version (C-x C-v)}}{147}
-\entry{\code {do-lowercase-version (M-A, M-B, M-\var {x}, \dots {})}}{145}
-\entry{\code {downcase-word (M-l)}}{141}
-\entry{\code {dump-functions ()}}{146}
-\entry{\code {dump-macros ()}}{146}
-\entry{\code {dump-variables ()}}{146}
-\entry{\code {dynamic-complete-history (M-\key {TAB})}}{144}
+\entry{\code {dabbrev-expand ()}}{145}
+\entry{\code {delete-char (C-d)}}{141}
+\entry{\code {delete-char-or-list ()}}{144}
+\entry{\code {delete-horizontal-space ()}}{143}
+\entry{\code {digit-argument (\kbd {M-0}, \kbd {M-1}, \dots {} \kbd {M--})}}{143}
+\entry{\code {display-shell-version (C-x C-v)}}{148}
+\entry{\code {do-lowercase-version (M-A, M-B, M-\var {x}, \dots {})}}{146}
+\entry{\code {downcase-word (M-l)}}{142}
+\entry{\code {dump-functions ()}}{147}
+\entry{\code {dump-macros ()}}{147}
+\entry{\code {dump-variables ()}}{147}
+\entry{\code {dynamic-complete-history (M-\key {TAB})}}{145}
\initial {E}
-\entry{\code {edit-and-execute-command (C-x C-e)}}{147}
-\entry{\code {end-kbd-macro (C-x ))}}{144}
-\entry{\code {\i {end-of-file} (usually C-d)}}{140}
-\entry{\code {end-of-history (M->)}}{138}
-\entry{\code {end-of-line (C-e)}}{137}
-\entry{\code {exchange-point-and-mark (C-x C-x)}}{145}
+\entry{\code {edit-and-execute-command (C-x C-e)}}{148}
+\entry{\code {end-kbd-macro (C-x ))}}{145}
+\entry{\code {\i {end-of-file} (usually C-d)}}{141}
+\entry{\code {end-of-history (M->)}}{139}
+\entry{\code {end-of-line (C-e)}}{138}
+\entry{\code {exchange-point-and-mark (C-x C-x)}}{146}
\initial {F}
-\entry{\code {fetch-history ()}}{140}
-\entry{\code {forward-backward-delete-char ()}}{140}
-\entry{\code {forward-char (C-f)}}{137}
-\entry{\code {forward-search-history (C-s)}}{138}
-\entry{\code {forward-word (M-f)}}{137}
+\entry{\code {fetch-history ()}}{141}
+\entry{\code {forward-backward-delete-char ()}}{141}
+\entry{\code {forward-char (C-f)}}{138}
+\entry{\code {forward-search-history (C-s)}}{139}
+\entry{\code {forward-word (M-f)}}{138}
\initial {G}
-\entry{\code {glob-complete-word (M-g)}}{146}
-\entry{\code {glob-expand-word (C-x *)}}{146}
-\entry{\code {glob-list-expansions (C-x g)}}{146}
+\entry{\code {glob-complete-word (M-g)}}{147}
+\entry{\code {glob-expand-word (C-x *)}}{147}
+\entry{\code {glob-list-expansions (C-x g)}}{147}
\initial {H}
-\entry{\code {history-and-alias-expand-line ()}}{147}
-\entry{\code {history-expand-line (M-^)}}{147}
-\entry{\code {history-search-backward ()}}{139}
-\entry{\code {history-search-forward ()}}{139}
-\entry{\code {history-substring-search-backward ()}}{139}
-\entry{\code {history-substring-search-forward ()}}{139}
+\entry{\code {history-and-alias-expand-line ()}}{148}
+\entry{\code {history-expand-line (M-^)}}{148}
+\entry{\code {history-search-backward ()}}{140}
+\entry{\code {history-search-forward ()}}{140}
+\entry{\code {history-substring-search-backward ()}}{140}
+\entry{\code {history-substring-search-forward ()}}{140}
\initial {I}
-\entry{\code {insert-comment (M-#)}}{146}
-\entry{\code {insert-completions (M-*)}}{143}
-\entry{\code {insert-last-argument (M-. or M-_)}}{147}
+\entry{\code {insert-comment (M-#)}}{147}
+\entry{\code {insert-completions (M-*)}}{144}
+\entry{\code {insert-last-argument (M-. or M-_)}}{148}
\initial {K}
-\entry{\code {kill-line (C-k)}}{141}
-\entry{\code {kill-region ()}}{142}
-\entry{\code {kill-whole-line ()}}{141}
-\entry{\code {kill-word (M-d)}}{141}
+\entry{\code {kill-line (C-k)}}{142}
+\entry{\code {kill-region ()}}{143}
+\entry{\code {kill-whole-line ()}}{142}
+\entry{\code {kill-word (M-d)}}{143}
\initial {M}
-\entry{\code {magic-space ()}}{147}
-\entry{\code {menu-complete ()}}{143}
-\entry{\code {menu-complete-backward ()}}{143}
+\entry{\code {magic-space ()}}{148}
+\entry{\code {menu-complete ()}}{144}
+\entry{\code {menu-complete-backward ()}}{144}
\initial {N}
-\entry{\code {next-history (C-n)}}{138}
-\entry{\code {next-screen-line ()}}{138}
-\entry{\code {non-incremental-forward-search-history (M-n)}}{139}
-\entry{\code {non-incremental-reverse-search-history (M-p)}}{138}
+\entry{\code {next-history (C-n)}}{139}
+\entry{\code {next-screen-line ()}}{139}
+\entry{\code {non-incremental-forward-search-history (M-n)}}{140}
+\entry{\code {non-incremental-reverse-search-history (M-p)}}{139}
\initial {O}
-\entry{\code {operate-and-get-next (C-o)}}{139}
-\entry{\code {overwrite-mode ()}}{141}
+\entry{\code {operate-and-get-next (C-o)}}{140}
+\entry{\code {overwrite-mode ()}}{142}
\initial {P}
-\entry{\code {possible-command-completions (C-x !)}}{144}
-\entry{\code {possible-completions (M-?)}}{143}
-\entry{\code {possible-filename-completions (C-x /)}}{144}
-\entry{\code {possible-hostname-completions (C-x @)}}{144}
-\entry{\code {possible-username-completions (C-x ~)}}{144}
-\entry{\code {possible-variable-completions (C-x $)}}{144}
-\entry{\code {prefix-meta (\key {ESC})}}{145}
-\entry{\code {previous-history (C-p)}}{138}
-\entry{\code {previous-screen-line ()}}{137}
-\entry{\code {print-last-kbd-macro ()}}{145}
+\entry{\code {possible-command-completions (C-x !)}}{145}
+\entry{\code {possible-completions (M-?)}}{144}
+\entry{\code {possible-filename-completions (C-x /)}}{145}
+\entry{\code {possible-hostname-completions (C-x @)}}{145}
+\entry{\code {possible-username-completions (C-x ~)}}{145}
+\entry{\code {possible-variable-completions (C-x $)}}{145}
+\entry{\code {prefix-meta (\key {ESC})}}{146}
+\entry{\code {previous-history (C-p)}}{139}
+\entry{\code {previous-screen-line ()}}{138}
+\entry{\code {print-last-kbd-macro ()}}{146}
\initial {Q}
-\entry{\code {quoted-insert (C-q or C-v)}}{140}
+\entry{\code {quoted-insert (C-q or C-v)}}{141}
\initial {R}
-\entry{\code {re-read-init-file (C-x C-r)}}{145}
-\entry{\code {redraw-current-line ()}}{138}
-\entry{\code {reverse-search-history (C-r)}}{138}
-\entry{\code {revert-line (M-r)}}{145}
+\entry{\code {re-read-init-file (C-x C-r)}}{146}
+\entry{\code {redraw-current-line ()}}{139}
+\entry{\code {reverse-search-history (C-r)}}{139}
+\entry{\code {revert-line (M-r)}}{146}
\initial {S}
-\entry{\code {self-insert (a, b, A, 1, !, \dots {})}}{140}
-\entry{\code {set-mark (C-@)}}{145}
-\entry{\code {shell-backward-kill-word ()}}{142}
-\entry{\code {shell-backward-word (M-C-b)}}{137}
-\entry{\code {shell-expand-line (M-C-e)}}{147}
-\entry{\code {shell-forward-word (M-C-f)}}{137}
-\entry{\code {shell-kill-word (M-C-d)}}{142}
+\entry{\code {self-insert (a, b, A, 1, !, \dots {})}}{141}
+\entry{\code {set-mark (C-@)}}{146}
+\entry{\code {shell-backward-kill-word ()}}{143}
+\entry{\code {shell-backward-word (M-C-b)}}{138}
+\entry{\code {shell-expand-line (M-C-e)}}{148}
+\entry{\code {shell-forward-word (M-C-f)}}{138}
+\entry{\code {shell-kill-word (M-C-d)}}{143}
\entry{\code {shell-transpose-words (M-C-t)}}{142}
-\entry{\code {skip-csi-sequence ()}}{145}
-\entry{\code {spell-correct-word (C-x s)}}{146}
-\entry{\code {start-kbd-macro (C-x ()}}{144}
+\entry{\code {skip-csi-sequence ()}}{146}
+\entry{\code {spell-correct-word (C-x s)}}{147}
+\entry{\code {start-kbd-macro (C-x ()}}{145}
\initial {T}
-\entry{\code {tilde-expand (M-&)}}{145}
-\entry{\code {transpose-chars (C-t)}}{140}
-\entry{\code {transpose-words (M-t)}}{141}
+\entry{\code {tilde-expand (M-&)}}{146}
+\entry{\code {transpose-chars (C-t)}}{141}
+\entry{\code {transpose-words (M-t)}}{142}
\initial {U}
-\entry{\code {undo (C-_ or C-x C-u)}}{145}
-\entry{\code {universal-argument ()}}{143}
-\entry{\code {unix-filename-rubout ()}}{142}
-\entry{\code {unix-line-discard (C-u)}}{141}
-\entry{\code {unix-word-rubout (C-w)}}{142}
-\entry{\code {upcase-word (M-u)}}{141}
+\entry{\code {undo (C-_ or C-x C-u)}}{146}
+\entry{\code {universal-argument ()}}{144}
+\entry{\code {unix-filename-rubout ()}}{143}
+\entry{\code {unix-line-discard (C-u)}}{142}
+\entry{\code {unix-word-rubout (C-w)}}{143}
+\entry{\code {upcase-word (M-u)}}{142}
\initial {Y}
-\entry{\code {yank (C-y)}}{142}
-\entry{\code {yank-last-arg (M-. or M-_)}}{139}
-\entry{\code {yank-nth-arg (M-C-y)}}{139}
-\entry{\code {yank-pop (M-y)}}{142}
+\entry{\code {yank (C-y)}}{143}
+\entry{\code {yank-last-arg (M-. or M-_)}}{140}
+\entry{\code {yank-nth-arg (M-C-y)}}{140}
+\entry{\code {yank-pop (M-y)}}{143}
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!-- This text is a brief description of the features that are present in
-the Bash shell (version 5.3, 16 June 2023).
+the Bash shell (version 5.3, 19 July 2023).
-This is Edition 5.3, last updated 16 June 2023,
+This is Edition 5.3, last updated 19 July 2023,
of The GNU Bash Reference Manual,
for Bash, Version 5.3.
<span id="Bash-Features-1"></span><h1 class="top">Bash Features</h1>
<p>This text is a brief description of the features that are present in
-the Bash shell (version 5.3, 16 June 2023).
+the Bash shell (version 5.3, 19 July 2023).
The Bash home page is <a href="http://www.gnu.org/software/bash/">http://www.gnu.org/software/bash/</a>.
</p>
-<p>This is Edition 5.3, last updated 16 June 2023,
+<p>This is Edition 5.3, last updated 19 July 2023,
of <cite>The GNU Bash Reference Manual</cite>,
for <code>Bash</code>, Version 5.3.
</p>
</p>
<p>After these expansions are performed, quote characters present in the
original word are removed unless they have been quoted themselves
-(<em>quote removal</em>).
+(<em>quote removal</em>). See <a href="#Quote-Removal">Quote Removal</a> for more details.
</p>
<p>Only brace expansion, word splitting, and filename expansion
can increase the number of words of the expansion; other expansions
<code>"${<var>name</var>[@]}"</code> and <code>${<var>name</var>[*]}</code>
(see <a href="#Arrays">Arrays</a>).
</p>
-<p>After all expansions, <code>quote removal</code> (see <a href="#Quote-Removal">Quote Removal</a>)
-is performed.
-</p>
<ul class="section-toc">
<li><a href="#Brace-Expansion" accesskey="1">Brace Expansion</a></li>
<li><a href="#Tilde-Expansion" accesskey="2">Tilde Expansion</a></li>
<pre class="example">hash [-r] [-p <var>filename</var>] [-dt] [<var>name</var>]
</pre></div>
-<p>Each time <code>hash</code> is invoked, it remembers the full pathnames of the
+<p>Each time <code>hash</code> is invoked, it remembers the full filenames of the
commands specified as <var>name</var> arguments,
so they need not be searched for on subsequent invocations.
The commands are found by searching through the directories listed in
<code>$PATH</code>.
-Any previously-remembered pathname is discarded.
+Any previously-remembered filename is discarded.
The <samp>-p</samp> option inhibits the path search, and <var>filename</var> is
used as the location of <var>name</var>.
The <samp>-r</samp> option causes the shell to forget all remembered locations.
+Assigning to the <code>PATH</code> variable also clears all hashed filenames.
The <samp>-d</samp> option causes the shell to forget the remembered location
of each <var>name</var>.
If the <samp>-t</samp> option is supplied, the full pathname to which each
</p></dd>
</dl>
-<p>When used with <code>test</code> or ‘<samp>[</samp>’, the ‘<samp><</samp>’ and ‘<samp>></samp>’
+<p>If the shell is not in <small>POSIX</small> mode,
+when used with <code>test</code> or ‘<samp>[</samp>’, the ‘<samp><</samp>’ and ‘<samp>></samp>’
operators sort lexicographically using ASCII ordering.
+If the shell is in <small>POSIX</small> mode, these operators use the current locale.
+</p>
+<p>The historical operator-precedence parsing with 4 or more arguments can
+lead to ambiguities when it encounters strings that look like primaries.
+The <small>POSIX</small> standard has deprecated the <samp>-a</samp> and <samp>-o</samp>
+primaries and enclosing expressions within parentheses.
+Scripts should no longer use them.
+It’s much more reliable to restrict test invocations to a single primary,
+and to replace uses of <samp>-a</samp> and <samp>-o</samp> with the shell’s
+<code>&&</code> and <code>||</code> list operators. For example, use
+</p>
+<div class="example">
+<pre class="example">test -n string1 && test -n string2
+</pre></div>
+
+<p>instead of
</p>
+<div class="example">
+<pre class="example">test -n string1 -a -n string2
+</pre></div>
+
</dd>
<dt id='index-times'><span><code>times</code><a href='#index-times' class='copiable-anchor'> ¶</a></span></dt>
<dd><div class="example">
<dd><div class="example">
<pre class="example">set [-abefhkmnptuvxBCEHPT] [-o <var>option-name</var>] [--] [-] [<var>argument</var> …]
set [+abefhkmnptuvxBCEHPT] [+o <var>option-name</var>] [--] [-] [<var>argument</var> …]
+set -o
+set +o
</pre></div>
<p>If no options or arguments are supplied, <code>set</code> displays the names
</dd>
<dt><span><code>-o <var>option-name</var></code></span></dt>
<dd>
-<p>Set the option corresponding to <var>option-name</var>:
+<p>Set the option corresponding to <var>option-name</var>.
+If <samp>-o</samp> is supplied with no <var>option-name</var>,
+<code>set</code> prints the current shell options settings.
+If <samp>+o</samp> is supplied with no <var>option-name</var>,
+<code>set</code> prints a series of
+<code>set</code>
+commands to recreate the current option settings
+on the standard output.
+Valid option names are:
</p>
<dl compact="compact">
<dt><span><code>allexport</code></span></dt>
Setting <code>extdebug</code> after the shell has started to execute a script,
or referencing this variable when <code>extdebug</code> is not set,
may result in inconsistent values.
+Assignments to <code>BASH_ARGC</code> have no effect, and it may not be unset.
</p>
</dd>
<dt id='index-BASH_005fARGV'><span><code>BASH_ARGV</code><a href='#index-BASH_005fARGV' class='copiable-anchor'> ¶</a></span></dt>
Setting <code>extdebug</code> after the shell has started to execute a script,
or referencing this variable when <code>extdebug</code> is not set,
may result in inconsistent values.
+Assignments to <code>BASH_ARGV</code> have no effect, and it may not be unset.
</p>
</dd>
<dt id='index-BASH_005fARGV0'><span><code>BASH_ARGV0</code><a href='#index-BASH_005fARGV0' class='copiable-anchor'> ¶</a></span></dt>
<code>${FUNCNAME[$i]}</code> was called (or <code>${BASH_LINENO[$i-1]}</code> if
referenced within another shell function).
Use <code>LINENO</code> to obtain the current line number.
+Assignments to <code>BASH_LINENO</code> have no effect, and it may not be unset.
</p>
</dd>
<dt id='index-BASH_005fLOADABLES_005fPATH'><span><code>BASH_LOADABLES_PATH</code><a href='#index-BASH_005fLOADABLES_005fPATH' class='copiable-anchor'> ¶</a></span></dt>
variable are defined.
The shell function <code>${FUNCNAME[$i]}</code> is defined in the file
<code>${BASH_SOURCE[$i]}</code> and called from <code>${BASH_SOURCE[$i+1]}</code>
+Assignments to <code>BASH_SOURCE</code> have no effect, and it may not be unset.
</p>
</dd>
<dt id='index-BASH_005fSUBSHELL'><span><code>BASH_SUBSHELL</code><a href='#index-BASH_005fSUBSHELL' class='copiable-anchor'> ¶</a></span></dt>
That means, for example, that a backslash preceding a double quote
character will escape it and the backslash will be removed.
+</li><li> The <code>test</code> builtin compares strings using the current locale when
+processing the ‘<samp><</samp>’ and ‘<samp>></samp>’ binary operators.
+
+</li><li> The <code>test</code> builtin’s <samp>-t</samp> unary primary requires an argument.
+Historical versions of <code>test</code> made the argument optional in certain
+cases, and bash attempts to accommodate those for backwards compatibility.
+
</li><li> Command substitutions don’t set the ‘<samp>?</samp>’ special parameter. The exit
status of a simple command without a command word is still the exit status
of the last command substitution that occurred while evaluating the variable
</dd>
<dt id='index-bind_002dtty_002dspecial_002dchars'><span><code>bind-tty-special-chars</code><a href='#index-bind_002dtty_002dspecial_002dchars' class='copiable-anchor'> ¶</a></span></dt>
<dd><p>If set to ‘<samp>on</samp>’ (the default), Readline attempts to bind the control
-characters treated specially by the kernel’s terminal driver to their
+characters that are
+treated specially by the kernel’s terminal driver to their
Readline equivalents.
+These override the default Readline bindings described here.
+Type ‘<samp>stty -a</samp>’ at a Bash prompt to see your current terminal settings,
+including the special control characters (usually <code>cchars</code>).
</p>
</dd>
<dt id='index-blink_002dmatching_002dparen'><span><code>blink-matching-paren</code><a href='#index-blink_002dmatching_002dparen' class='copiable-anchor'> ¶</a></span></dt>
the last two words on the line.
</p>
</dd>
+<dt id='index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029'><span><code>shell-transpose-words (M-C-t)</code><a href='#index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029' class='copiable-anchor'> ¶</a></span></dt>
+<dd><p>Drag the word before point past the word after point,
+moving point past that word as well.
+If the insertion point is at the end of the line, this transposes
+the last two words on the line.
+Word boundaries are the same as <code>shell-forward-word</code> and
+<code>shell-backward-word</code>.
+</p>
+</dd>
<dt id='index-upcase_002dword-_0028M_002du_0029'><span><code>upcase-word (M-u)</code><a href='#index-upcase_002dword-_0028M_002du_0029' class='copiable-anchor'> ¶</a></span></dt>
<dd><p>Uppercase the current (or following) word. With a negative argument,
uppercase the previous word, but do not move the cursor.
Word boundaries are the same as <code>shell-backward-word</code>.
</p>
</dd>
-<dt id='index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029'><span><code>shell-transpose-words (M-C-t)</code><a href='#index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029' class='copiable-anchor'> ¶</a></span></dt>
-<dd><p>Drag the word before point past the word after point,
-moving point past that word as well.
-If the insertion point is at the end of the line, this transposes
-the last two words on the line.
-Word boundaries are the same as <code>shell-forward-word</code> and
-<code>shell-backward-word</code>.
-</p>
-</dd>
<dt id='index-unix_002dword_002drubout-_0028C_002dw_0029'><span><code>unix-word-rubout (C-w)</code><a href='#index-unix_002dword_002drubout-_0028C_002dw_0029' class='copiable-anchor'> ¶</a></span></dt>
<dd><p>Kill the word behind point, using white space as a word boundary.
The killed text is saved on the kill-ring.
<tr><td></td><td valign="top"><a href="#index-shell_002dexpand_002dline-_0028M_002dC_002de_0029"><code>shell-expand-line (M-C-e)</code></a>:</td><td> </td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-shell_002dforward_002dword-_0028M_002dC_002df_0029"><code>shell-forward-word (M-C-f)</code></a>:</td><td> </td><td valign="top"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-shell_002dkill_002dword-_0028M_002dC_002dd_0029"><code>shell-kill-word (M-C-d)</code></a>:</td><td> </td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029"><code>shell-transpose-words (M-C-t)</code></a>:</td><td> </td><td valign="top"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029"><code>shell-transpose-words (M-C-t)</code></a>:</td><td> </td><td valign="top"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-skip_002dcsi_002dsequence-_0028_0029"><code>skip-csi-sequence ()</code></a>:</td><td> </td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-spell_002dcorrect_002dword-_0028C_002dx-s_0029"><code>spell-correct-word (C-x s)</code></a>:</td><td> </td><td valign="top"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
<tr><td></td><td valign="top"><a href="#index-start_002dkbd_002dmacro-_0028C_002dx-_0028_0029"><code>start-kbd-macro (C-x ()</code></a>:</td><td> </td><td valign="top"><a href="#Keyboard-Macros">Keyboard Macros</a></td></tr>
-This is pdfTeX, Version 3.141592653-2.6-1.40.22 (TeX Live 2021/MacPorts 2021.58693_0) (preloaded format=pdfetex 2021.8.30) 5 JUL 2023 11:27
+This is pdfTeX, Version 3.141592653-2.6-1.40.22 (TeX Live 2021/MacPorts 2021.58693_0) (preloaded format=pdfetex 2021.8.30) 23 JUL 2023 18:18
entering extended mode
restricted \write18 enabled.
file:line:error style messages enabled.
%&-line parsing enabled.
-**\input /usr/local/src/bash/bash-20230703/doc/bashref.texi \input /usr/local/s
-rc/bash/bash-20230703/doc/bashref.texi
-(/usr/local/src/bash/bash-20230703/doc/bashref.texi
-(/usr/local/src/bash/bash-20230703/doc/texinfo.tex
+**\input /usr/local/src/bash/bash-20230719/doc/bashref.texi \input /usr/local/s
+rc/bash/bash-20230719/doc/bashref.texi
+(/usr/local/src/bash/bash-20230719/doc/bashref.texi
+(/usr/local/src/bash/bash-20230719/doc/texinfo.tex
Loading texinfo [version 2015-11-22.14]:
\outerhsize=\dimen16
\outervsize=\dimen17
texinfo.tex: doing @include of version.texi
-(/usr/local/src/bash/bash-20230703/doc/version.texi) [1{/opt/local/var/db/texmf
+(/usr/local/src/bash/bash-20230719/doc/version.texi) [1{/opt/local/var/db/texmf
/fonts/map/pdftex/updmap/pdftex.map}] [2]
-(/usr/local/build/bash/bash-20230703/doc/bashref.toc [-1] [-2] [-3]) [-4]
-(/usr/local/build/bash/bash-20230703/doc/bashref.toc)
-(/usr/local/build/bash/bash-20230703/doc/bashref.toc) Chapter 1
+(/usr/local/build/bash/bash-20230719/doc/bashref.toc [-1] [-2] [-3]) [-4]
+(/usr/local/build/bash/bash-20230719/doc/bashref.toc)
+(/usr/local/build/bash/bash-20230719/doc/bashref.toc) Chapter 1
\openout0 = `bashref.toc'.
-(/usr/local/build/bash/bash-20230703/doc/bashref.aux)
+(/usr/local/build/bash/bash-20230719/doc/bashref.aux)
\openout1 = `bashref.aux'.
Chapter 2 [1] [2]
[49] [50] [51]
[52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66]
[67]
-Overfull \hbox (38.26585pt too wide) in paragraph at lines 5355--5355
+Overfull \hbox (38.26585pt too wide) in paragraph at lines 5377--5377
[]@texttt set [-abefhkmnptuvxBCEHPT] [-o @textttsl option-name@texttt ] [--] [
-] [@textttsl ar-gu-ment []@texttt ][]
.etc.
-Overfull \hbox (38.26585pt too wide) in paragraph at lines 5356--5356
+Overfull \hbox (38.26585pt too wide) in paragraph at lines 5378--5378
[]@texttt set [+abefhkmnptuvxBCEHPT] [+o @textttsl option-name@texttt ] [--] [
-] [@textttsl ar-gu-ment []@texttt ][]
[118] [119]
texinfo.tex: doing @include of rluser.texi
- (/usr/local/src/bash/bash-20230703/lib/readline/doc/rluser.texi
+ (/usr/local/src/bash/bash-20230719/lib/readline/doc/rluser.texi
Chapter 8 [120] [121] [122] [123] [124] [125] [126] [127] [128] [129] [130]
[131]
-Underfull \hbox (badness 7540) in paragraph at lines 874--880
+Underfull \hbox (badness 7540) in paragraph at lines 878--884
[]@textrm In the ex-am-ple above, @textttsl C-u[] @textrm is bound to the func
-tion
.etc.
-Underfull \hbox (badness 10000) in paragraph at lines 874--880
+Underfull \hbox (badness 10000) in paragraph at lines 878--884
@texttt universal-argument[]@textrm , @textttsl M-DEL[] @textrm is bound to th
e func-tion
.@texttt v
.etc.
-[132] [133] [134]
-Overfull \hbox (26.43913pt too wide) in paragraph at lines 1108--1108
+[132] [133] [134] [135]
+Overfull \hbox (26.43913pt too wide) in paragraph at lines 1112--1112
[]@texttt Meta-Control-h: backward-kill-word Text after the function name is i
gnored[]
.@texttt t
.etc.
-[135] [136]
+[136] [137]
@fnindfile=@write6
\openout6 = `bashref.fn'.
- [137] [138] [139] [140] [141] [142] [143] [144] [145] [146]
-[147] [148] [149] [150] [151] [152] [153] [154] [155])
+ [138] [139] [140] [141] [142] [143] [144] [145] [146] [147]
+[148] [149] [150] [151] [152] [153] [154] [155] [156])
texinfo.tex: doing @include of hsuser.texi
-(/usr/local/src/bash/bash-20230703/lib/readline/doc/hsuser.texi Chapter 9
-[156] [157] [158] [159] [160] [161]) Chapter 10 [162] [163] [164] [165]
-[166]
-Underfull \hbox (badness 10000) in paragraph at lines 9662--9671
+(/usr/local/src/bash/bash-20230719/lib/readline/doc/hsuser.texi Chapter 9
+[157] [158] [159] [160] [161] [162]) Chapter 10 [163] [164] [165] [166]
+[167]
+Underfull \hbox (badness 10000) in paragraph at lines 9699--9708
[]@textrm All of the fol-low-ing op-tions ex-cept for `@texttt alt-array-implem
entation[]@textrm '[],
.etc.
-Underfull \hbox (badness 10000) in paragraph at lines 9662--9671
+Underfull \hbox (badness 10000) in paragraph at lines 9699--9708
@textrm `@texttt disabled-builtins[]@textrm '[], `@texttt direxpand-default[]@t
extrm '[], `@texttt strict-posix-default[]@textrm '[], and
.@texttt a
.etc.
-[167] [168] [169] [170] Appendix A [171] Appendix B [172] [173] [174] [175]
-[176] [177] Appendix C [178]
+[168] [169] [170] [171] Appendix A [172] Appendix B [173] [174] [175] [176]
+[177] [178] Appendix C [179]
texinfo.tex: doing @include of fdl.texi
- (/usr/local/src/bash/bash-20230703/doc/fdl.texi
-[179] [180] [181] [182] [183] [184] [185]) Appendix D [186] [187] [188]
-[189] [190] [191] [192] [193] [194] [195] )
+ (/usr/local/src/bash/bash-20230719/doc/fdl.texi
+[180] [181] [182] [183] [184] [185] [186]) Appendix D [187] [188] [189]
+[190] [191] [192] [193] [194] [195] [196] )
Here is how much of TeX's memory you used:
- 4102 strings out of 497086
- 47608 string characters out of 6206517
+ 4103 strings out of 497086
+ 47611 string characters out of 6206517
142074 words of memory out of 5000000
4869 multiletter control sequences out of 15000+600000
34315 words of font info for 116 fonts, out of 8000000 for 9000
ve/fonts/type1/public/amsfonts/cm/cmtt9.pfb></opt/local/share/texmf-texlive/fon
ts/type1/public/cm-super/sfrm1095.pfb></opt/local/share/texmf-texlive/fonts/typ
e1/public/cm-super/sfrm1440.pfb>
-Output written on bashref.pdf (201 pages, 809290 bytes).
+Output written on bashref.pdf (202 pages, 810875 bytes).
PDF statistics:
- 2808 PDF objects out of 2984 (max. 8388607)
- 2560 compressed objects within 26 object streams
- 329 named destinations out of 1000 (max. 500000)
+ 2812 PDF objects out of 2984 (max. 8388607)
+ 2563 compressed objects within 26 object streams
+ 330 named destinations out of 1000 (max. 500000)
1157 words of extra memory for PDF output out of 10000 (max. 10000000)
$ v=123
$ echo $@{v-unset@}
123
+$ echo $@{v:-unset-or-null@}
+123
+$ unset v
+$ echo $@{v-unset@}
+unset
+$ v=
+$ echo $@{v:-unset-or-null@}
+unset-or-null
@end example
@item $@{@var{parameter}:=@var{word}@}
@numsecentry{Bash Builtin Commands}{4.2}{Bash Builtins}{57}
@numsecentry{Modifying Shell Behavior}{4.3}{Modifying Shell Behavior}{68}
@numsubsecentry{The Set Builtin}{4.3.1}{The Set Builtin}{68}
-@numsubsecentry{The Shopt Builtin}{4.3.2}{The Shopt Builtin}{72}
+@numsubsecentry{The Shopt Builtin}{4.3.2}{The Shopt Builtin}{73}
@numsecentry{Special Builtins}{4.4}{Special Builtins}{79}
@numchapentry{Shell Variables}{5}{Shell Variables}{80}
@numsecentry{Bourne Shell Variables}{5.1}{Bourne Shell Variables}{80}
@numsecentry{Readline Init File}{8.3}{Readline Init File}{124}
@numsubsecentry{Readline Init File Syntax}{8.3.1}{Readline Init File Syntax}{124}
@numsubsecentry{Conditional Init Constructs}{8.3.2}{Conditional Init Constructs}{133}
-@numsubsecentry{Sample Init File}{8.3.3}{Sample Init File}{134}
-@numsecentry{Bindable Readline Commands}{8.4}{Bindable Readline Commands}{137}
-@numsubsecentry{Commands For Moving}{8.4.1}{Commands For Moving}{137}
-@numsubsecentry{Commands For Manipulating The History}{8.4.2}{Commands For History}{138}
-@numsubsecentry{Commands For Changing Text}{8.4.3}{Commands For Text}{140}
-@numsubsecentry{Killing And Yanking}{8.4.4}{Commands For Killing}{141}
-@numsubsecentry{Specifying Numeric Arguments}{8.4.5}{Numeric Arguments}{142}
-@numsubsecentry{Letting Readline Type For You}{8.4.6}{Commands For Completion}{143}
-@numsubsecentry{Keyboard Macros}{8.4.7}{Keyboard Macros}{144}
-@numsubsecentry{Some Miscellaneous Commands}{8.4.8}{Miscellaneous Commands}{145}
-@numsecentry{Readline vi Mode}{8.5}{Readline vi Mode}{147}
-@numsecentry{Programmable Completion}{8.6}{Programmable Completion}{147}
-@numsecentry{Programmable Completion Builtins}{8.7}{Programmable Completion Builtins}{150}
-@numsecentry{A Programmable Completion Example}{8.8}{A Programmable Completion Example}{154}
-@numchapentry{Using History Interactively}{9}{Using History Interactively}{157}
-@numsecentry{Bash History Facilities}{9.1}{Bash History Facilities}{157}
-@numsecentry{Bash History Builtins}{9.2}{Bash History Builtins}{157}
-@numsecentry{History Expansion}{9.3}{History Interaction}{159}
-@numsubsecentry{Event Designators}{9.3.1}{Event Designators}{160}
-@numsubsecentry{Word Designators}{9.3.2}{Word Designators}{161}
-@numsubsecentry{Modifiers}{9.3.3}{Modifiers}{161}
-@numchapentry{Installing Bash}{10}{Installing Bash}{163}
-@numsecentry{Basic Installation}{10.1}{Basic Installation}{163}
-@numsecentry{Compilers and Options}{10.2}{Compilers and Options}{164}
-@numsecentry{Compiling For Multiple Architectures}{10.3}{Compiling For Multiple Architectures}{164}
-@numsecentry{Installation Names}{10.4}{Installation Names}{165}
-@numsecentry{Specifying the System Type}{10.5}{Specifying the System Type}{165}
-@numsecentry{Sharing Defaults}{10.6}{Sharing Defaults}{165}
-@numsecentry{Operation Controls}{10.7}{Operation Controls}{166}
-@numsecentry{Optional Features}{10.8}{Optional Features}{166}
-@appentry{Reporting Bugs}{A}{Reporting Bugs}{172}
-@appentry{Major Differences From The Bourne Shell}{B}{Major Differences From The Bourne Shell}{173}
-@appsecentry{Implementation Differences From The SVR4.2 Shell}{B.1}{}{177}
-@appentry{GNU Free Documentation License}{C}{GNU Free Documentation License}{179}
-@appentry{Indexes}{D}{Indexes}{187}
-@appsecentry{Index of Shell Builtin Commands}{D.1}{Builtin Index}{187}
-@appsecentry{Index of Shell Reserved Words}{D.2}{Reserved Word Index}{188}
-@appsecentry{Parameter and Variable Index}{D.3}{Variable Index}{189}
-@appsecentry{Function Index}{D.4}{Function Index}{191}
-@appsecentry{Concept Index}{D.5}{Concept Index}{193}
+@numsubsecentry{Sample Init File}{8.3.3}{Sample Init File}{135}
+@numsecentry{Bindable Readline Commands}{8.4}{Bindable Readline Commands}{138}
+@numsubsecentry{Commands For Moving}{8.4.1}{Commands For Moving}{138}
+@numsubsecentry{Commands For Manipulating The History}{8.4.2}{Commands For History}{139}
+@numsubsecentry{Commands For Changing Text}{8.4.3}{Commands For Text}{141}
+@numsubsecentry{Killing And Yanking}{8.4.4}{Commands For Killing}{142}
+@numsubsecentry{Specifying Numeric Arguments}{8.4.5}{Numeric Arguments}{143}
+@numsubsecentry{Letting Readline Type For You}{8.4.6}{Commands For Completion}{144}
+@numsubsecentry{Keyboard Macros}{8.4.7}{Keyboard Macros}{145}
+@numsubsecentry{Some Miscellaneous Commands}{8.4.8}{Miscellaneous Commands}{146}
+@numsecentry{Readline vi Mode}{8.5}{Readline vi Mode}{148}
+@numsecentry{Programmable Completion}{8.6}{Programmable Completion}{148}
+@numsecentry{Programmable Completion Builtins}{8.7}{Programmable Completion Builtins}{151}
+@numsecentry{A Programmable Completion Example}{8.8}{A Programmable Completion Example}{155}
+@numchapentry{Using History Interactively}{9}{Using History Interactively}{158}
+@numsecentry{Bash History Facilities}{9.1}{Bash History Facilities}{158}
+@numsecentry{Bash History Builtins}{9.2}{Bash History Builtins}{158}
+@numsecentry{History Expansion}{9.3}{History Interaction}{160}
+@numsubsecentry{Event Designators}{9.3.1}{Event Designators}{161}
+@numsubsecentry{Word Designators}{9.3.2}{Word Designators}{162}
+@numsubsecentry{Modifiers}{9.3.3}{Modifiers}{162}
+@numchapentry{Installing Bash}{10}{Installing Bash}{164}
+@numsecentry{Basic Installation}{10.1}{Basic Installation}{164}
+@numsecentry{Compilers and Options}{10.2}{Compilers and Options}{165}
+@numsecentry{Compiling For Multiple Architectures}{10.3}{Compiling For Multiple Architectures}{165}
+@numsecentry{Installation Names}{10.4}{Installation Names}{166}
+@numsecentry{Specifying the System Type}{10.5}{Specifying the System Type}{166}
+@numsecentry{Sharing Defaults}{10.6}{Sharing Defaults}{166}
+@numsecentry{Operation Controls}{10.7}{Operation Controls}{167}
+@numsecentry{Optional Features}{10.8}{Optional Features}{167}
+@appentry{Reporting Bugs}{A}{Reporting Bugs}{173}
+@appentry{Major Differences From The Bourne Shell}{B}{Major Differences From The Bourne Shell}{174}
+@appsecentry{Implementation Differences From The SVR4.2 Shell}{B.1}{}{178}
+@appentry{GNU Free Documentation License}{C}{GNU Free Documentation License}{180}
+@appentry{Indexes}{D}{Indexes}{188}
+@appsecentry{Index of Shell Builtin Commands}{D.1}{Builtin Index}{188}
+@appsecentry{Index of Shell Reserved Words}{D.2}{Reserved Word Index}{189}
+@appsecentry{Parameter and Variable Index}{D.3}{Variable Index}{190}
+@appsecentry{Function Index}{D.4}{Function Index}{192}
+@appsecentry{Concept Index}{D.5}{Concept Index}{194}
\entry{history-preserve-point}{128}{\code {history-preserve-point}}
\entry{history-size}{128}{\code {history-size}}
\entry{horizontal-scroll-mode}{128}{\code {horizontal-scroll-mode}}
-\entry{input-meta}{128}{\code {input-meta}}
-\entry{meta-flag}{128}{\code {meta-flag}}
+\entry{input-meta}{129}{\code {input-meta}}
+\entry{meta-flag}{129}{\code {meta-flag}}
\entry{isearch-terminators}{129}{\code {isearch-terminators}}
\entry{keymap}{129}{\code {keymap}}
\entry{mark-modified-lines}{129}{\code {mark-modified-lines}}
\entry{mark-symlinked-directories}{129}{\code {mark-symlinked-directories}}
-\entry{match-hidden-files}{129}{\code {match-hidden-files}}
+\entry{match-hidden-files}{130}{\code {match-hidden-files}}
\entry{menu-complete-display-prefix}{130}{\code {menu-complete-display-prefix}}
\entry{output-meta}{130}{\code {output-meta}}
\entry{page-completions}{130}{\code {page-completions}}
\entry{search-ignore-case}{130}{\code {search-ignore-case}}
\entry{show-all-if-ambiguous}{130}{\code {show-all-if-ambiguous}}
\entry{show-all-if-unmodified}{130}{\code {show-all-if-unmodified}}
-\entry{show-mode-in-prompt}{130}{\code {show-mode-in-prompt}}
+\entry{show-mode-in-prompt}{131}{\code {show-mode-in-prompt}}
\entry{skip-completed-text}{131}{\code {skip-completed-text}}
\entry{vi-cmd-mode-string}{131}{\code {vi-cmd-mode-string}}
\entry{vi-ins-mode-string}{131}{\code {vi-ins-mode-string}}
\initial {I}
\entry{\code {IFS}}{80}
\entry{\code {IGNOREEOF}}{89}
-\entry{\code {input-meta}}{128}
+\entry{\code {input-meta}}{129}
\entry{\code {INPUTRC}}{89}
\entry{\code {INSIDE_EMACS}}{89}
\entry{\code {isearch-terminators}}{129}
\entry{\code {MAPFILE}}{90}
\entry{\code {mark-modified-lines}}{129}
\entry{\code {mark-symlinked-directories}}{129}
-\entry{\code {match-hidden-files}}{129}
+\entry{\code {match-hidden-files}}{130}
\entry{\code {menu-complete-display-prefix}}{130}
-\entry{\code {meta-flag}}{128}
+\entry{\code {meta-flag}}{129}
\initial {O}
\entry{\code {OLDPWD}}{90}
\entry{\code {OPTARG}}{80}
\entry{\code {SHLVL}}{91}
\entry{\code {show-all-if-ambiguous}}{130}
\entry{\code {show-all-if-unmodified}}{130}
-\entry{\code {show-mode-in-prompt}}{130}
+\entry{\code {show-mode-in-prompt}}{131}
\entry{\code {skip-completed-text}}{131}
\entry{\code {SRANDOM}}{91}
\initial {T}
/* Run the job. */
if (already_running == 0)
- set_job_running (job);
+ jobs[job]->flags |= J_NOTIFIED;
/* Save the tty settings before we start the job in the foreground. */
if (foreground)
jobs[job]->flags |= J_ASYNC; /* running in background now */
}
- /* If the job is already running, then don't bother jump-starting it. */
- if (already_running == 0)
- {
- jobs[job]->flags |= J_NOTIFIED;
- killpg (jobs[job]->pgrp, SIGCONT);
- }
+ /* Change job state to running only if the kill SIGCONT succeeds or if kill
+ says the process has terminated so we clean it up later. */
+ if (killpg (jobs[job]->pgrp, SIGCONT) >= 0 || errno == ESRCH)
+ set_job_running (job);
if (foreground)
{
int hasglob; /* return value from glob_pattern_p */
int nalloca;
struct globval *firstmalloc, *tmplink;
- char *convfn;
+ char *convfn, *convpat;
lastlink = 0;
count = 0;
if (d == NULL)
return ((char **) &glob_error_return);
+ convpat = fnx_fromfs (pat, patlen);
+ if (convpat != pat)
+ convpat = savestring (convpat);
+
/* Compute the flags that will be passed to strmatch(). We don't
need to do this every time through the loop. */
mflags = (noglob_dot_filenames ? FNM_PERIOD : FNM_DOTDOT) | FNM_PATHNAME;
free (subdir);
convfn = fnx_fromfs (dp->d_name, D_NAMLEN (dp));
- if (strmatch (pat, convfn, mflags) != FNM_NOMATCH)
+ if (strmatch (convpat, convfn, mflags) != FNM_NOMATCH)
{
if (nalloca < ALLOCA_MAX)
{
}
(void) closedir (d);
+
+ if (convpat != pat)
+ free (convpat);
}
/* compat: if GX_ADDCURDIR, add the passed directory also. Add an empty
}
filename_len = strlen (filename);
+ /* Normalize the filename if the application has set a rewrite hook. */
+ if (*filename && rl_filename_rewrite_hook)
+ {
+ temp = (*rl_filename_rewrite_hook) (filename, filename_len);
+ if (temp != filename)
+ {
+ xfree (filename);
+ filename = temp;
+ filename_len = strlen (filename);
+ }
+ }
+
rl_filename_completion_desired = 1;
}
register int i, j;
int cclass, collsym, equiv, c, last_was_backslash;
int savei, savej;
+ unsigned char cc;
temp = (char *)xmalloc (2 * strlen (pathname) + 1);
else if (pathname[i] == CTLESC)
{
convert_to_backslash:
+ cc = pathname[i+1];
+
if ((qflags & QGLOB_FILENAME) && pathname[i+1] == '/')
continue;
+
/* What to do if preceding char is backslash? */
- if (pathname[i+1] != CTLESC && (qflags & QGLOB_REGEXP) && ere_char (pathname[i+1]) == 0)
+
+ /* We don't have to backslash-quote non-special ERE characters if
+ we're quoting a regexp. */
+ if (cc != CTLESC && (qflags & QGLOB_REGEXP) && ere_char (cc) == 0)
continue;
+
+ /* We don't have to backslash-quote non-special BRE characters if
+ we're quoting a glob pattern. */
+ if (cc != CTLESC && (qflags & QGLOB_REGEXP) == 0 && glob_char_p (pathname+i+1) == 0)
+ continue;
+
+ /* If we're in a multibyte locale, don't bother quoting multibyte
+ characters. It matters if we're going to convert NFD to NFC on
+ macOS, and doesn't make a difference on other systems. */
+ if (cc != CTLESC && locale_utf8locale && UTF8_SINGLEBYTE (cc) == 0)
+ continue; /* probably don't need to check for UTF-8 locale */
+
temp[j++] = '\\';
i++;
if (pathname[i] == '\0')
echo "warning: been compiled into the shell" >&2
echo "warning: some of these tests will fail if extended pattern matching has not" >&2
echo "warning: been compiled into the shell" >&2
+echo "warning: the text of system error messages may vary between systems and" >&2
+echo "warning: produce diff output." >&2
${THIS_SH} ./cond.tests > ${BASH_TSTOUT} 2>&1
diff ${BASH_TSTOUT} cond.right && rm -f ${BASH_TSTOUT}