old `quoted' is now (flags & W_QUOTED); changed all callers
appropriately
+ 5/7
+ ---
+list.c,externs.h
+ - list_reverse: change to use a void * scheme instead of GENERIC_LIST *
+ scheme as a temporary fix for strict pointer aliasing issues
+ Originally from Sam James <sam@gentoo.org>
+
+general.h
+ - REVERSE_LIST: change to use new void * argument scheme for now
+
+list.c,externs.h
+ - wlist_append,wlist_length: new WORD_LIST * specific versions of
+ list_append and list_length, since all callers use WORD_LIST *
+ arguments
+
+subst.c,pcomplete.c,execute_cmd.c,
+builtins/common.c,builtins/printf.def,
+lib/sh/stringvec.c,lib/sh/stringlist.c
+ - wlist_append,wlist_length: change callers to use new functions instead
+ of list_append/list_length, since they're always called with
+ WORD_LIST * arguments
+
-Wmissing-declarations -Winline \
-Wmissing-prototypes -Wredundant-decls \
-Wformat-security -pedantic \
- -Werror=incompatible-pointer-types
+ -fstrict-aliasing -Wstrict-aliasing \
+ -Werror=incompatible-pointer-types
GCC_LINT_CFLAGS = $(BASE_CCFLAGS) $(CPPFLAGS) $(GCC_LINT_FLAGS)
/* common.c - utility functions for all builtins */
-/* Copyright (C) 1987-2024 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2026 Free Software Foundation, Inc.
This file is part of GNU Bash, the Bourne Again SHell.
{
dispose_words (rest_of_args);
rest_of_args = copy_word_list (list);
- posparam_count += list_length ((GENERIC_LIST *)list);
+ posparam_count += wlist_length (list);
}
if (destructive)
This file is printf.def, from which is created printf.c.
It implements the builtin "printf" in Bash.
-Copyright (C) 1997-2025 Free Software Foundation, Inc.
+Copyright (C) 1997-2026 Free Software Foundation, Inc.
This file is part of GNU Bash, the Bourne Again SHell.
size_t len;
WORD_LIST *l;
- len = list_length ((GENERIC_LIST *)orig_arglist);
+ len = wlist_length (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)
includes i\bi if the shell is interactive, so a shell script or a startup
file can test this state.
- The following paragraphs describe how b\bba\bas\bsh\bh executes its startup files.
- If any of the files exist but cannot be read, b\bba\bas\bsh\bh reports an error.
- Tildes are expanded in filenames as described below under T\bTi\bil\bld\bde\be E\bEx\bxp\bpa\ban\bn-\b-
+ A _\bn_\bo_\bn_\b-_\bi_\bn_\bt_\be_\br_\ba_\bc_\bt_\bi_\bv_\be _\bs_\bh_\be_\bl_\bl is, not surprisingly, one that does not satisfy
+ the tests for interactivity given above. A non-interactive shell is
+ usually started to run commands from a script file supplied as an argu-
+ ment (a _\bs_\bh_\be_\bl_\bl _\bs_\bc_\br_\bi_\bp_\bt) or from a string supplied with the -\b-c\bc option.
+
+ The following paragraphs describe how b\bba\bas\bsh\bh executes its startup files.
+ If any of the files exist but cannot be read, b\bba\bas\bsh\bh reports an error.
+ Tildes in filenames are expanded as described below under T\bTi\bil\bld\bde\be E\bEx\bxp\bpa\ban\bn-\b-
s\bsi\bio\bon\bn in the E\bEX\bXP\bPA\bAN\bNS\bSI\bIO\bON\bN section.
- When b\bba\bas\bsh\bh is invoked as an interactive login shell, or as a non-inter-
- active shell with the -\b--\b-l\blo\bog\bgi\bin\bn option, it first reads and executes com-
- mands from the file _\b/_\be_\bt_\bc_\b/_\bp_\br_\bo_\bf_\bi_\bl_\be, if that file exists. After reading
+ When b\bba\bas\bsh\bh is invoked as an interactive login shell, or as a non-inter-
+ active shell with the -\b--\b-l\blo\bog\bgi\bin\bn option, it first reads and executes com-
+ mands from the file _\b/_\be_\bt_\bc_\b/_\bp_\br_\bo_\bf_\bi_\bl_\be, if that file exists. After reading
that file, it looks for _\b~_\b/_\b._\bb_\ba_\bs_\bh_\b__\bp_\br_\bo_\bf_\bi_\bl_\be, _\b~_\b/_\b._\bb_\ba_\bs_\bh_\b__\bl_\bo_\bg_\bi_\bn, and _\b~_\b/_\b._\bp_\br_\bo_\bf_\bi_\bl_\be,
- in that order, and reads and executes commands from the first one that
- exists and is readable. The -\b--\b-n\bno\bop\bpr\bro\bof\bfi\bil\ble\be option may be used when the
+ in that order, and reads and executes commands from the first one that
+ exists and is readable. The -\b--\b-n\bno\bop\bpr\bro\bof\bfi\bil\ble\be option may be used when the
shell is started to inhibit this behavior.
When an interactive login shell exits, or a non-interactive login shell
- executes the e\bex\bxi\bit\bt builtin command, b\bba\bas\bsh\bh reads and executes commands
+ executes the e\bex\bxi\bit\bt builtin command, b\bba\bas\bsh\bh reads and executes commands
from the file _\b~_\b/_\b._\bb_\ba_\bs_\bh_\b__\bl_\bo_\bg_\bo_\bu_\bt, if it exists.
- When an interactive shell that is not a login shell is started, b\bba\bas\bsh\bh
- reads and executes commands from _\b~_\b/_\b._\bb_\ba_\bs_\bh_\br_\bc, if that file exists. The
- -\b--\b-n\bno\bor\brc\bc option inhibits this behavior. The -\b--\b-r\brc\bcf\bfi\bil\ble\be _\bf_\bi_\bl_\be option causes
+ When an interactive shell that is not a login shell is started, b\bba\bas\bsh\bh
+ reads and executes commands from _\b~_\b/_\b._\bb_\ba_\bs_\bh_\br_\bc, if that file exists. The
+ -\b--\b-n\bno\bor\brc\bc option inhibits this behavior. The -\b--\b-r\brc\bcf\bfi\bil\ble\be _\bf_\bi_\bl_\be option causes
b\bba\bas\bsh\bh to use _\bf_\bi_\bl_\be instead of _\b~_\b/_\b._\bb_\ba_\bs_\bh_\br_\bc.
- When b\bba\bas\bsh\bh is started non-interactively, to run a shell script, for ex-
- ample, it looks for the variable B\bBA\bAS\bSH\bH_\b_E\bEN\bNV\bV in the environment, expands
- its value if it appears there, and uses the expanded value as the name
- of a file to read and execute. B\bBa\bas\bsh\bh behaves as if the following com-
- mand were executed:
+ When b\bba\bas\bsh\bh is started non-interactively, it looks for the variable
+ B\bBA\bAS\bSH\bH_\b_E\bEN\bNV\bV in the environment, expands its value if it appears there, and
+ uses the expanded value as the name of a file to read and execute.
+ B\bBa\bas\bsh\bh behaves as if the following command were executed:
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
but does not use the value of the P\bPA\bAT\bTH\bH variable to search for the file-
name.
- If b\bba\bas\bsh\bh is invoked with the name s\bsh\bh, it tries to mimic the startup be-
- havior of historical versions of s\bsh\bh as closely as possible, while con-
- forming to the POSIX standard as well. When invoked as an interactive
- login shell, or a non-interactive shell with the -\b--\b-l\blo\bog\bgi\bin\bn option, it
- first attempts to read and execute commands from _\b/_\be_\bt_\bc_\b/_\bp_\br_\bo_\bf_\bi_\bl_\be and
+ If b\bba\bas\bsh\bh is invoked with the name s\bsh\bh, it tries to mimic the startup be-
+ havior of historical versions of s\bsh\bh as closely as possible, while con-
+ forming to the POSIX standard as well. When invoked as an interactive
+ login shell, or a non-interactive shell with the -\b--\b-l\blo\bog\bgi\bin\bn option, it
+ first attempts to read and execute commands from _\b/_\be_\bt_\bc_\b/_\bp_\br_\bo_\bf_\bi_\bl_\be and
_\b~_\b/_\b._\bp_\br_\bo_\bf_\bi_\bl_\be, in that order. The -\b--\b-n\bno\bop\bpr\bro\bof\bfi\bil\ble\be option inhibits this behav-
ior. When invoked as an interactive shell with the name s\bsh\bh, b\bba\bas\bsh\bh looks
- for the variable E\bEN\bNV\bV, expands its value if it is defined, and uses the
- expanded value as the name of a file to read and execute. Since a
- shell invoked as s\bsh\bh does not attempt to read and execute commands from
- any other startup files, the -\b--\b-r\brc\bcf\bfi\bil\ble\be option has no effect. A non-in-
- teractive shell invoked with the name s\bsh\bh does not attempt to read any
+ for the variable E\bEN\bNV\bV, expands its value if it is defined, and uses the
+ expanded value as the name of a file to read and execute. Since a
+ shell invoked as s\bsh\bh does not attempt to read and execute commands from
+ any other startup files, the -\b--\b-r\brc\bcf\bfi\bil\ble\be option has no effect. A non-in-
+ teractive shell invoked with the name s\bsh\bh does not attempt to read any
other startup files.
- When invoked as s\bsh\bh, b\bba\bas\bsh\bh enters posix mode after reading the startup
+ When invoked as s\bsh\bh, b\bba\bas\bsh\bh enters posix mode after reading the startup
files.
- When b\bba\bas\bsh\bh is started in posix mode, as with the -\b--\b-p\bpo\bos\bsi\bix\bx command line
+ When b\bba\bas\bsh\bh is started in posix mode, as with the -\b--\b-p\bpo\bos\bsi\bix\bx command line
option, it follows the POSIX standard for startup files. In this mode,
- interactive shells expand the E\bEN\bNV\bV variable and read and execute com-
- mands from the file whose name is the expanded value. No other startup
- files are read.
+ interactive shells expand the E\bEN\bNV\bV variable and read and execute com-
+ mands from the file whose name is the expanded value. A posix-mode
+ shell does not attempt to read any other startup files, even when in-
+ voked as a login shell.
B\bBa\bas\bsh\bh attempts to determine when it is being run with its standard input
- connected to a network connection, as when executed by the historical
- and rarely-seen remote shell daemon, usually _\br_\bs_\bh_\bd, or the secure shell
- daemon _\bs_\bs_\bh_\bd. If b\bba\bas\bsh\bh determines it is being run non-interactively in
- this fashion, it reads and executes commands from _\b~_\b/_\b._\bb_\ba_\bs_\bh_\br_\bc, if that
- file exists and is readable. B\bBa\bas\bsh\bh does not read this file if invoked
- as s\bsh\bh. The -\b--\b-n\bno\bor\brc\bc option inhibits this behavior, and the -\b--\b-r\brc\bcf\bfi\bil\ble\be op-
- tion makes b\bba\bas\bsh\bh use a different file instead of _\b~_\b/_\b._\bb_\ba_\bs_\bh_\br_\bc, but neither
- _\br_\bs_\bh_\bd nor _\bs_\bs_\bh_\bd generally invoke the shell with those options or allow
+ connected to a network connection, as when executed by the secure shell
+ daemon _\bs_\bs_\bh_\bd or the historical and rarely-seen remote shell daemon, usu-
+ ally _\br_\bs_\bh_\bd. If b\bba\bas\bsh\bh determines it is being run non-interactively in
+ this fashion, it reads and executes commands from _\b~_\b/_\b._\bb_\ba_\bs_\bh_\br_\bc, if that
+ file exists and is readable. B\bBa\bas\bsh\bh does not read this file if invoked
+ as s\bsh\bh. The -\b--\b-n\bno\bor\brc\bc option inhibits this behavior, and the -\b--\b-r\brc\bcf\bfi\bil\ble\be op-
+ tion makes b\bba\bas\bsh\bh use a different file instead of _\b~_\b/_\b._\bb_\ba_\bs_\bh_\br_\bc, but neither
+ _\bs_\bs_\bh_\bd nor _\br_\bs_\bh_\bd generally invoke the shell with those options or allow
them to be specified.
If the shell is started with the effective user (group) id not equal to
the real user (group) id, and the -\b-p\bp option is not supplied, no startup
files are read, shell functions are not inherited from the environment,
- the S\bSH\bHE\bEL\bLL\bLO\bOP\bPT\bTS\bS, B\bBA\bAS\bSH\bHO\bOP\bPT\bTS\bS, C\bCD\bDP\bPA\bAT\bTH\bH, and G\bGL\bLO\bOB\bBI\bIG\bGN\bNO\bOR\bRE\bE variables, if they ap-
- pear in the environment, are ignored, and the effective user id is set
- to the real user id. If the -\b-p\bp option is supplied at invocation, the
- startup behavior is the same, but the effective user id is not reset.
+ the S\bSH\bHE\bEL\bLL\bLO\bOP\bPT\bTS\bS, B\bBA\bAS\bSH\bHO\bOP\bPT\bTS\bS, C\bCD\bDP\bPA\bAT\bTH\bH, and G\bGL\bLO\bOB\bBI\bIG\bGN\bNO\bOR\bRE\bE variables, if they ap-
+ pear in the environment, are ignored, and the effective user id is set
+ to the real user id. If the -\b-p\bp option is supplied at invocation, the
+ startup behavior is the same, but b\bba\bas\bsh\bh does not reset the effective
+ user id.
D\bDE\bEF\bFI\bIN\bNI\bIT\bTI\bIO\bON\bNS\bS
The following definitions are used throughout the rest of this docu-
Array variables may not (yet) be exported.
-GNU Bash 5.3 2026 March 3 _\bB_\bA_\bS_\bH(1)
+GNU Bash 5.3 2026 April 29 _\bB_\bA_\bS_\bH(1)
.\" Case Western Reserve University
.\" chet.ramey@case.edu
.\"
-.\" Last Change: Tue Mar 3 10:52:34 EST 2026
+.\" Last Change: Wed May 6 16:08:33 EDT 2026
.\"
.\" For bash_builtins, strip all but "SHELL BUILTIN COMMANDS" section
.\" For rbash, strip all but "RESTRICTED SHELL" section
.ds zX \" empty
.if \n(zZ=1 .ig zZ
.if \n(zY=1 .ig zY
-.TH BASH 1 "2026 March 3" "GNU Bash 5.3"
+.TH BASH 1 "2026 May 6" "GNU Bash 5.3"
.\"
.ie \n(.g \{\
.ds ' \(aq
if the shell is interactive,
so a shell script or a startup file can test this state.
.PP
+A \fInon-interactive shell\fP is, not surprisingly, one that does not
+satisfy the tests for interactivity given above.
+A non-interactive shell is usually started to run commands from a script
+file supplied as an argument (a \fIshell script\fP)
+or from a string supplied with the
+.B \-c
+option.
+.PP
The following paragraphs describe how
.B bash
executes its startup files.
If any of the files exist but cannot be read,
.B bash
reports an error.
-Tildes are expanded in filenames as described below under
+Tildes in filenames are expanded as described below under
.B "Tilde Expansion"
in the
.SM
.PP
When
.B bash
-is started non-interactively, to run a shell script, for example, it
+is started non-interactively, it
looks for the variable
.SM
.B BASH_ENV
.B ENV
variable and read and execute commands from the file
whose name is the expanded value.
-No other startup files are read.
+A posix-mode shell does not attempt to read any other startup files,
+even when invoked as a login shell.
.PP
.B Bash
attempts to determine when it is being run with its standard input
connected to a network connection, as when executed by
-the historical and rarely-seen remote shell daemon, usually \fIrshd\fP,
-or the secure shell daemon \fIsshd\fP.
+the secure shell daemon \fIsshd\fP
+or the historical and rarely-seen remote shell daemon, usually \fIrshd\fP.
If
.B bash
determines it is being run non-interactively in this fashion,
option makes \fBbash\fP use a different file instead of
.FN \*~/.bashrc ,
but neither
-\fIrshd\fP nor \fIsshd\fP generally invoke the shell with those options
+\fIsshd\fP nor \fIrshd\fP generally invoke the shell with those options
or allow them to be specified.
.PP
If the shell is started with the effective user (group) id not equal to the
variables, if they appear in the environment, are ignored,
and the effective user id is set to the real user id.
If the \fB\-p\fP option is supplied at invocation, the startup behavior is
-the same, but the effective user id is not reset.
+the same, but \fBbash\fP does not reset the effective user id.
.SH DEFINITIONS
The following definitions are used throughout the rest of this
document.
parameter expansion, command substitution, and arithmetic expansion,
the character sequence
.B \e<newline>
-is treated literally, and
+is treated as a line continuation, and
.B \e
must be used to quote the characters
.BR \e ,
<!-- Creator : groff version 1.23.0 -->
-<!-- CreationDate: Mon Mar 16 15:46:12 2026 -->
+<!-- CreationDate: Wed Apr 29 10:18:50 2026 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<b>i</b> if the shell is interactive, so a shell script or a
startup file can test this state.</p>
+<p style="margin-left:9%; margin-top: 1em">A
+<i>non-interactive shell</i> is, not surprisingly, one that
+does not satisfy the tests for interactivity given above. A
+non-interactive shell is usually started to run commands
+from a script file supplied as an argument (a <i>shell
+script</i>) or from a string supplied with the
+<b>−c</b> option.</p>
+
<p style="margin-left:9%; margin-top: 1em">The following
paragraphs describe how <b>bash</b> executes its startup
files. If any of the files exist but cannot be read,
-<b>bash</b> reports an error. Tildes are expanded in
-filenames as described below under <b>Tilde Expansion</b> in
+<b>bash</b> reports an error. Tildes in filenames are
+expanded as described below under <b>Tilde Expansion</b> in
the <b><small>EXPANSION</small></b> section.</p>
<p style="margin-left:9%; margin-top: 1em">When <b>bash</b>
<A HREF="file:~/.bashrc"><i>~/.bashrc</i></A>.</p>
<p style="margin-left:9%; margin-top: 1em">When <b>bash</b>
-is started non-interactively, to run a shell script, for
-example, it looks for the variable
+is started non-interactively, it looks for the variable
<b><small>BASH_ENV</small></b> in the environment, expands
its value if it appears there, and uses the expanded value
as the name of a file to read and execute. <b>Bash</b>
the <small>POSIX</small> standard for startup files. In this
mode, interactive shells expand the
<b><small>ENV</small></b> variable and read and execute
-commands from the file whose name is the expanded value. No
-other startup files are read.</p>
+commands from the file whose name is the expanded value. A
+posix-mode shell does not attempt to read any other startup
+files, even when invoked as a login shell.</p>
<p style="margin-left:9%; margin-top: 1em"><b>Bash</b>
attempts to determine when it is being run with its standard
input connected to a network connection, as when executed by
-the historical and rarely-seen remote shell daemon, usually
-<i>rshd</i>, or the secure shell daemon <i>sshd</i>. If
+the secure shell daemon <i>sshd</i> or the historical and
+rarely-seen remote shell daemon, usually <i>rshd</i>. If
<b>bash</b> determines it is being run non-interactively in
this fashion, it reads and executes commands from
<A HREF="file:~/.bashrc"><i>~/.bashrc</i></A>, if that file exists and is readable.
The <b>−−norc</b> option inhibits this behavior,
and the <b>−−rcfile</b> option makes <b>bash</b>
use a different file instead of <A HREF="file:~/.bashrc"><i>~/.bashrc</i></A>, but
-neither <i>rshd</i> nor <i>sshd</i> generally invoke the
+neither <i>sshd</i> nor <i>rshd</i> generally invoke the
shell with those options or allow them to be specified.</p>
<p style="margin-left:9%; margin-top: 1em">If the shell is
variables, if they appear in the environment, are ignored,
and the effective user id is set to the real user id. If the
<b>−p</b> option is supplied at invocation, the
-startup behavior is the same, but the effective user id is
-not reset.</p>
+startup behavior is the same, but <b>bash</b> does not reset
+the effective user id.</p>
<h2>DEFINITIONS
<a name="DEFINITIONS"></a>
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, 16 March 2026).
+Bash shell (version 5.3, 29 April 2026).
- This is Edition 5.3, last updated 16 March 2026, of ‘The GNU Bash
+ This is Edition 5.3, last updated 29 April 2026, of ‘The GNU Bash
Reference Manual’, for ‘Bash’, Version 5.3.
Copyright © 1988-2026 Free Software Foundation, Inc.
*************
This text is a brief description of the features that are present in the
-Bash shell (version 5.3, 16 March 2026). The Bash home page is
+Bash shell (version 5.3, 29 April 2026). The Bash home page is
<http://www.gnu.org/software/bash/>.
- This is Edition 5.3, last updated 16 March 2026, of ‘The GNU Bash
+ This is Edition 5.3, last updated 29 April 2026, of ‘The GNU Bash
Reference Manual’, for ‘Bash’, Version 5.3.
Bash contains features that appear in other popular shells, and some
3.8 Shell Scripts
=================
-A shell script is a text file containing shell commands. When such a
+A “shell script” is a text file containing shell commands. When such a
file is used as the first non-option argument when invoking Bash, and
neither the ‘-c’ nor ‘-s’ option is supplied (*note Invoking Bash::),
Bash reads and executes commands from the file, then exits. This mode
determined by isatty(3)), or one started with the ‘-i’ option. *Note
Interactive Shells::, for more information.
+ A “non-interactive shell” is, not surprisingly, one that does not
+satisfy the tests for interactivity given above. A non-interactive
+shell is usually started to run commands from a script file supplied as
+an argument (*note Shell Scripts::) or from a string supplied with the
+‘-c’ option.
+
If arguments remain after option processing, and neither the ‘-c’ nor
the ‘-s’ option has been supplied, the first argument is treated as the
name of a file containing shell commands (*note Shell Scripts::). When
to open the file in the current directory, and, if no file is found,
searches the directories in ‘PATH’ for the script.
+ For example, the following command starts an interactive shell:
+
+ bash
+
+whereas this command will read and execute commands from ‘filename’:
+
+ bash filename
+
+This command will execute ‘echo hello’:
+
+ bash -c 'echo hello'
+
+and this will execute the same command read from the standard input:
+
+ echo echo hello | bash
+
\1f
File: bash.info, Node: Bash Startup Files, Next: Interactive Shells, Prev: Invoking Bash, Up: Bash Features
======================
This section describes how Bash executes its startup files. If any of
-the files exist but cannot be read, Bash reports an error. Tildes are
-expanded in filenames as described above under Tilde Expansion (*note
+the files exist but cannot be read, Bash reports an error. Tildes in
+filenames are expanded as described above under Tilde Expansion (*note
Tilde Expansion::).
Interactive shells are described in *note Interactive Shells::.
When Bash is started in POSIX mode, as with the ‘--posix’ command line
option, it follows the POSIX standard for startup files. In this mode,
interactive shells expand the ‘ENV’ variable and read and execute
-commands from the file whose name is the expanded value. No other
-startup files are read.
+commands from the file whose name is the expanded value. A posix-mode
+shell does not attempt to read any other startup files, even when
+invoked as a login shell.
Invoked by remote shell daemon
..............................
Bash attempts to determine when it is being run with its standard input
-connected to a network connection, as when executed by the historical
-and rarely-seen remote shell daemon, usually ‘rshd’, or the secure shell
-daemon ‘sshd’. If Bash determines it is being run non-interactively in
+connected to a network connection, as when executed by the secure shell
+daemon ‘sshd’. or the historical and rarely-seen remote shell daemon,
+usually ‘rshd’. If Bash determines it is being run non-interactively in
this fashion, it reads and executes commands from ‘~/.bashrc’, if that
file exists and is readable. Bash does not read this file if invoked as
‘sh’. The ‘--norc’ option inhibits this behavior, and the ‘--rcfile’
option makes Bash use a different file instead of ‘~/.bashrc’, but
-neither ‘rshd’ nor ‘sshd’ generally invoke the shell with those options
+neither ‘sshd’ nor ‘rshd’ generally invoke the shell with those options
or allow them to be specified.
Invoked with unequal effective and real UID/GIDs
the ‘SHELLOPTS’, ‘BASHOPTS’, ‘CDPATH’, and ‘GLOBIGNORE’ variables, if
they appear in the environment, are ignored, and the effective user id
is set to the real user id. If the ‘-p’ option is supplied at
-invocation, the startup behavior is the same, but the effective user id
-is not reset.
+invocation, the startup behavior is the same, but Bash does not reset
+the effective user id.
\1f
File: bash.info, Node: Interactive Shells, Next: Bash Conditional Expressions, Prev: Bash Startup Files, Up: Bash Features
Node: Exit Status\7f142889
Node: Signals\7f144948
Node: Shell Scripts\7f149896
-Node: Shell Builtin Commands\7f153194
-Node: Bourne Shell Builtins\7f155535
-Node: Bash Builtins\7f182254
-Node: Modifying Shell Behavior\7f219989
-Node: The Set Builtin\7f220331
-Node: The Shopt Builtin\7f232325
-Node: Special Builtins\7f249378
-Node: Shell Variables\7f250367
-Node: Bourne Shell Variables\7f250801
-Node: Bash Variables\7f253309
-Node: Bash Features\7f292593
-Node: Invoking Bash\7f293607
-Node: Bash Startup Files\7f300191
-Node: Interactive Shells\7f305433
-Node: What is an Interactive Shell?\7f305841
-Node: Is this Shell Interactive?\7f306503
-Node: Interactive Shell Behavior\7f307327
-Node: Bash Conditional Expressions\7f311088
-Node: Shell Arithmetic\7f316505
-Node: Aliases\7f319832
-Node: Arrays\7f322966
-Node: The Directory Stack\7f330668
-Node: Directory Stack Builtins\7f331465
-Node: Controlling the Prompt\7f335910
-Node: The Restricted Shell\7f338794
-Node: Bash POSIX Mode\7f341887
-Node: Shell Compatibility Mode\7f361703
-Node: Job Control\7f370710
-Node: Job Control Basics\7f371167
-Node: Job Control Builtins\7f377535
-Node: Job Control Variables\7f384323
-Node: Command Line Editing\7f385554
-Node: Introduction and Notation\7f387257
-Node: Readline Interaction\7f389609
-Node: Readline Bare Essentials\7f390797
-Node: Readline Movement Commands\7f392605
-Node: Readline Killing Commands\7f393601
-Node: Readline Arguments\7f395624
-Node: Searching\7f396714
-Node: Readline Init File\7f398957
-Node: Readline Init File Syntax\7f400260
-Node: Conditional Init Constructs\7f427211
-Node: Sample Init File\7f431596
-Node: Bindable Readline Commands\7f434716
-Node: Commands For Moving\7f436254
-Node: Commands For History\7f438718
-Node: Commands For Text\7f444109
-Node: Commands For Killing\7f448234
-Node: Numeric Arguments\7f451022
-Node: Commands For Completion\7f452174
-Node: Keyboard Macros\7f457870
-Node: Miscellaneous Commands\7f458571
-Node: Readline vi Mode\7f466114
-Node: Programmable Completion\7f467091
-Node: Programmable Completion Builtins\7f476827
-Node: A Programmable Completion Example\7f488564
-Node: Using History Interactively\7f493909
-Node: Bash History Facilities\7f494590
-Node: Bash History Builtins\7f498325
-Node: History Interaction\7f505920
-Node: Event Designators\7f510870
-Node: Word Designators\7f512448
-Node: Modifiers\7f514840
-Node: Installing Bash\7f516777
-Node: Basic Installation\7f517893
-Node: Compilers and Options\7f521769
-Node: Compiling For Multiple Architectures\7f522519
-Node: Installation Names\7f524272
-Node: Specifying the System Type\7f526506
-Node: Sharing Defaults\7f527252
-Node: Operation Controls\7f527966
-Node: Optional Features\7f528985
-Node: Reporting Bugs\7f541708
-Node: Major Differences From The Bourne Shell\7f543065
-Node: GNU Free Documentation License\7f564492
-Node: Indexes\7f589669
-Node: Builtin Index\7f590120
-Node: Reserved Word Index\7f597218
-Node: Variable Index\7f599663
-Node: Function Index\7f617076
-Node: Concept Index\7f631209
+Node: Shell Builtin Commands\7f153200
+Node: Bourne Shell Builtins\7f155541
+Node: Bash Builtins\7f182260
+Node: Modifying Shell Behavior\7f219995
+Node: The Set Builtin\7f220337
+Node: The Shopt Builtin\7f232331
+Node: Special Builtins\7f249384
+Node: Shell Variables\7f250373
+Node: Bourne Shell Variables\7f250807
+Node: Bash Variables\7f253315
+Node: Bash Features\7f292599
+Node: Invoking Bash\7f293613
+Node: Bash Startup Files\7f300843
+Node: Interactive Shells\7f306165
+Node: What is an Interactive Shell?\7f306573
+Node: Is this Shell Interactive?\7f307235
+Node: Interactive Shell Behavior\7f308059
+Node: Bash Conditional Expressions\7f311820
+Node: Shell Arithmetic\7f317237
+Node: Aliases\7f320564
+Node: Arrays\7f323698
+Node: The Directory Stack\7f331400
+Node: Directory Stack Builtins\7f332197
+Node: Controlling the Prompt\7f336642
+Node: The Restricted Shell\7f339526
+Node: Bash POSIX Mode\7f342619
+Node: Shell Compatibility Mode\7f362435
+Node: Job Control\7f371442
+Node: Job Control Basics\7f371899
+Node: Job Control Builtins\7f378267
+Node: Job Control Variables\7f385055
+Node: Command Line Editing\7f386286
+Node: Introduction and Notation\7f387989
+Node: Readline Interaction\7f390341
+Node: Readline Bare Essentials\7f391529
+Node: Readline Movement Commands\7f393337
+Node: Readline Killing Commands\7f394333
+Node: Readline Arguments\7f396356
+Node: Searching\7f397446
+Node: Readline Init File\7f399689
+Node: Readline Init File Syntax\7f400992
+Node: Conditional Init Constructs\7f427943
+Node: Sample Init File\7f432328
+Node: Bindable Readline Commands\7f435448
+Node: Commands For Moving\7f436986
+Node: Commands For History\7f439450
+Node: Commands For Text\7f444841
+Node: Commands For Killing\7f448966
+Node: Numeric Arguments\7f451754
+Node: Commands For Completion\7f452906
+Node: Keyboard Macros\7f458602
+Node: Miscellaneous Commands\7f459303
+Node: Readline vi Mode\7f466846
+Node: Programmable Completion\7f467823
+Node: Programmable Completion Builtins\7f477559
+Node: A Programmable Completion Example\7f489296
+Node: Using History Interactively\7f494641
+Node: Bash History Facilities\7f495322
+Node: Bash History Builtins\7f499057
+Node: History Interaction\7f506652
+Node: Event Designators\7f511602
+Node: Word Designators\7f513180
+Node: Modifiers\7f515572
+Node: Installing Bash\7f517509
+Node: Basic Installation\7f518625
+Node: Compilers and Options\7f522501
+Node: Compiling For Multiple Architectures\7f523251
+Node: Installation Names\7f525004
+Node: Specifying the System Type\7f527238
+Node: Sharing Defaults\7f527984
+Node: Operation Controls\7f528698
+Node: Optional Features\7f529717
+Node: Reporting Bugs\7f542440
+Node: Major Differences From The Bourne Shell\7f543797
+Node: GNU Free Documentation License\7f565224
+Node: Indexes\7f590401
+Node: Builtin Index\7f590852
+Node: Reserved Word Index\7f597950
+Node: Variable Index\7f600395
+Node: Function Index\7f617808
+Node: Concept Index\7f631941
\1f
End Tag Table
@xrdef{Interactive Shell Behavior-pg}{104}
@xrdef{Bash Conditional Expressions-title}{Bash Conditional Expressions}
@xrdef{Bash Conditional Expressions-snt}{Section@tie 6.4}
-@xrdef{Bash Conditional Expressions-pg}{105}
+@xrdef{Bash Conditional Expressions-pg}{106}
@xrdef{Shell Arithmetic-title}{Shell Arithmetic}
@xrdef{Shell Arithmetic-snt}{Section@tie 6.5}
-@xrdef{Shell Arithmetic-pg}{107}
+@xrdef{Shell Arithmetic-pg}{108}
@xrdef{Aliases-title}{Aliases}
@xrdef{Aliases-snt}{Section@tie 6.6}
@xrdef{Aliases-pg}{109}
@xrdef{Job Control-snt}{Chapter@tie 7}
@xrdef{Job Control Basics-title}{Job Control Basics}
@xrdef{Job Control Basics-snt}{Section@tie 7.1}
-@xrdef{Job Control-pg}{125}
-@xrdef{Job Control Basics-pg}{125}
+@xrdef{Job Control-pg}{126}
+@xrdef{Job Control Basics-pg}{126}
@xrdef{Job Control Builtins-title}{Job Control Builtins}
@xrdef{Job Control Builtins-snt}{Section@tie 7.2}
-@xrdef{Job Control Builtins-pg}{126}
+@xrdef{Job Control Builtins-pg}{127}
@xrdef{Job Control Variables-title}{Job Control Variables}
@xrdef{Job Control Variables-snt}{Section@tie 7.3}
-@xrdef{Job Control Variables-pg}{129}
+@xrdef{Job Control Variables-pg}{130}
@xrdef{Command Line Editing-title}{Command Line Editing}
@xrdef{Command Line Editing-snt}{Chapter@tie 8}
@xrdef{Introduction and Notation-title}{Introduction to Line Editing}
@xrdef{Introduction and Notation-snt}{Section@tie 8.1}
@xrdef{Readline Interaction-title}{Readline Interaction}
@xrdef{Readline Interaction-snt}{Section@tie 8.2}
-@xrdef{Command Line Editing-pg}{130}
-@xrdef{Introduction and Notation-pg}{130}
-@xrdef{Readline Interaction-pg}{130}
+@xrdef{Command Line Editing-pg}{131}
+@xrdef{Introduction and Notation-pg}{131}
+@xrdef{Readline Interaction-pg}{131}
@xrdef{Readline Bare Essentials-title}{Readline Bare Essentials}
@xrdef{Readline Bare Essentials-snt}{Section@tie 8.2.1}
@xrdef{Readline Movement Commands-title}{Readline Movement Commands}
@xrdef{Readline Movement Commands-snt}{Section@tie 8.2.2}
-@xrdef{Readline Bare Essentials-pg}{131}
-@xrdef{Readline Movement Commands-pg}{131}
+@xrdef{Readline Bare Essentials-pg}{132}
+@xrdef{Readline Movement Commands-pg}{132}
@xrdef{Readline Killing Commands-title}{Readline Killing Commands}
@xrdef{Readline Killing Commands-snt}{Section@tie 8.2.3}
@xrdef{Readline Arguments-title}{Readline Arguments}
@xrdef{Readline Arguments-snt}{Section@tie 8.2.4}
@xrdef{Searching-title}{Searching for Commands in the History}
@xrdef{Searching-snt}{Section@tie 8.2.5}
-@xrdef{Readline Killing Commands-pg}{132}
-@xrdef{Readline Arguments-pg}{132}
+@xrdef{Readline Killing Commands-pg}{133}
+@xrdef{Readline Arguments-pg}{133}
@xrdef{Readline Init File-title}{Readline Init File}
@xrdef{Readline Init File-snt}{Section@tie 8.3}
@xrdef{Readline Init File Syntax-title}{Readline Init File Syntax}
@xrdef{Readline Init File Syntax-snt}{Section@tie 8.3.1}
-@xrdef{Searching-pg}{133}
-@xrdef{Readline Init File-pg}{133}
-@xrdef{Readline Init File Syntax-pg}{133}
+@xrdef{Searching-pg}{134}
+@xrdef{Readline Init File-pg}{134}
+@xrdef{Readline Init File Syntax-pg}{134}
@xrdef{Conditional Init Constructs-title}{Conditional Init Constructs}
@xrdef{Conditional Init Constructs-snt}{Section@tie 8.3.2}
-@xrdef{Conditional Init Constructs-pg}{143}
+@xrdef{Conditional Init Constructs-pg}{144}
@xrdef{Sample Init File-title}{Sample Init File}
@xrdef{Sample Init File-snt}{Section@tie 8.3.3}
-@xrdef{Sample Init File-pg}{144}
+@xrdef{Sample Init File-pg}{145}
@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}{147}
-@xrdef{Commands For Moving-pg}{147}
+@xrdef{Bindable Readline Commands-pg}{148}
+@xrdef{Commands For Moving-pg}{148}
@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}{148}
+@xrdef{Commands For History-pg}{149}
@xrdef{Commands For Text-title}{Commands For Changing Text}
@xrdef{Commands For Text-snt}{Section@tie 8.4.3}
-@xrdef{Commands For Text-pg}{150}
+@xrdef{Commands For Text-pg}{151}
@xrdef{Commands For Killing-title}{Killing And Yanking}
@xrdef{Commands For Killing-snt}{Section@tie 8.4.4}
-@xrdef{Commands For Killing-pg}{151}
+@xrdef{Commands For Killing-pg}{152}
@xrdef{Numeric Arguments-title}{Specifying Numeric Arguments}
@xrdef{Numeric Arguments-snt}{Section@tie 8.4.5}
@xrdef{Commands For Completion-title}{Letting Readline Type For You}
@xrdef{Commands For Completion-snt}{Section@tie 8.4.6}
-@xrdef{Numeric Arguments-pg}{153}
-@xrdef{Commands For Completion-pg}{153}
+@xrdef{Numeric Arguments-pg}{154}
+@xrdef{Commands For Completion-pg}{154}
@xrdef{Keyboard Macros-title}{Keyboard Macros}
@xrdef{Keyboard Macros-snt}{Section@tie 8.4.7}
@xrdef{Miscellaneous Commands-title}{Some Miscellaneous Commands}
@xrdef{Miscellaneous Commands-snt}{Section@tie 8.4.8}
-@xrdef{Keyboard Macros-pg}{155}
-@xrdef{Miscellaneous Commands-pg}{155}
+@xrdef{Keyboard Macros-pg}{156}
+@xrdef{Miscellaneous Commands-pg}{156}
@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}{158}
-@xrdef{Programmable Completion-pg}{158}
+@xrdef{Readline vi Mode-pg}{159}
+@xrdef{Programmable Completion-pg}{159}
@xrdef{Programmable Completion Builtins-title}{Programmable Completion Builtins}
@xrdef{Programmable Completion Builtins-snt}{Section@tie 8.7}
-@xrdef{Programmable Completion Builtins-pg}{161}
+@xrdef{Programmable Completion Builtins-pg}{162}
@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}{165}
+@xrdef{A Programmable Completion Example-pg}{166}
@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{Using History Interactively-pg}{168}
-@xrdef{Bash History Facilities-pg}{168}
+@xrdef{Using History Interactively-pg}{169}
+@xrdef{Bash History Facilities-pg}{169}
@xrdef{Bash History Builtins-title}{Bash History Builtins}
@xrdef{Bash History Builtins-snt}{Section@tie 9.2}
-@xrdef{Bash History Builtins-pg}{169}
+@xrdef{Bash History Builtins-pg}{170}
@xrdef{History Interaction-title}{History Expansion}
@xrdef{History Interaction-snt}{Section@tie 9.3}
-@xrdef{History Interaction-pg}{171}
+@xrdef{History Interaction-pg}{172}
@xrdef{Event Designators-title}{Event Designators}
@xrdef{Event Designators-snt}{Section@tie 9.3.1}
-@xrdef{Event Designators-pg}{172}
+@xrdef{Event Designators-pg}{173}
@xrdef{Word Designators-title}{Word Designators}
@xrdef{Word Designators-snt}{Section@tie 9.3.2}
-@xrdef{Word Designators-pg}{173}
+@xrdef{Word Designators-pg}{174}
@xrdef{Modifiers-title}{Modifiers}
@xrdef{Modifiers-snt}{Section@tie 9.3.3}
-@xrdef{Modifiers-pg}{174}
+@xrdef{Modifiers-pg}{175}
@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}{175}
-@xrdef{Basic Installation-pg}{175}
+@xrdef{Installing Bash-pg}{176}
+@xrdef{Basic Installation-pg}{176}
@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}{176}
-@xrdef{Compiling For Multiple Architectures-pg}{176}
+@xrdef{Compilers and Options-pg}{177}
+@xrdef{Compiling For Multiple Architectures-pg}{177}
@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}{177}
-@xrdef{Specifying the System Type-pg}{177}
-@xrdef{Sharing Defaults-pg}{177}
+@xrdef{Installation Names-pg}{178}
+@xrdef{Specifying the System Type-pg}{178}
+@xrdef{Sharing Defaults-pg}{178}
@xrdef{Optional Features-title}{Optional Features}
@xrdef{Optional Features-snt}{Section@tie 10.8}
-@xrdef{Operation Controls-pg}{178}
-@xrdef{Optional Features-pg}{178}
+@xrdef{Operation Controls-pg}{179}
+@xrdef{Optional Features-pg}{179}
@xrdef{Reporting Bugs-title}{Reporting Bugs}
@xrdef{Reporting Bugs-snt}{Appendix@tie @char65{}}
-@xrdef{Reporting Bugs-pg}{184}
+@xrdef{Reporting Bugs-pg}{185}
@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}{185}
+@xrdef{Major Differences From The Bourne Shell-pg}{186}
@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}{192}
+@xrdef{GNU Free Documentation License-pg}{193}
@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}{200}
-@xrdef{Builtin Index-pg}{200}
+@xrdef{Indexes-pg}{201}
+@xrdef{Builtin Index-pg}{201}
@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}{201}
-@xrdef{Variable Index-pg}{202}
+@xrdef{Reserved Word Index-pg}{202}
+@xrdef{Variable Index-pg}{203}
@xrdef{Function Index-title}{Function Index}
@xrdef{Function Index-snt}{Section@tie @char68.4}
-@xrdef{Function Index-pg}{204}
+@xrdef{Function Index-pg}{205}
@xrdef{Concept Index-title}{Concept Index}
@xrdef{Concept Index-snt}{Section@tie @char68.5}
-@xrdef{Concept Index-pg}{206}
+@xrdef{Concept Index-pg}{207}
\entry{dirs}{112}{\code {dirs}}
\entry{popd}{113}{\code {popd}}
\entry{pushd}{113}{\code {pushd}}
-\entry{bg}{126}{\code {bg}}
-\entry{fg}{127}{\code {fg}}
-\entry{jobs}{127}{\code {jobs}}
-\entry{kill}{127}{\code {kill}}
-\entry{wait}{128}{\code {wait}}
-\entry{disown}{128}{\code {disown}}
-\entry{suspend}{128}{\code {suspend}}
-\entry{compgen}{161}{\code {compgen}}
-\entry{complete}{162}{\code {complete}}
-\entry{compopt}{165}{\code {compopt}}
-\entry{fc}{169}{\code {fc}}
-\entry{history}{170}{\code {history}}
+\entry{bg}{127}{\code {bg}}
+\entry{fg}{128}{\code {fg}}
+\entry{jobs}{128}{\code {jobs}}
+\entry{kill}{128}{\code {kill}}
+\entry{wait}{129}{\code {wait}}
+\entry{disown}{129}{\code {disown}}
+\entry{suspend}{129}{\code {suspend}}
+\entry{compgen}{162}{\code {compgen}}
+\entry{complete}{163}{\code {complete}}
+\entry{compopt}{166}{\code {compopt}}
+\entry{fc}{170}{\code {fc}}
+\entry{history}{171}{\code {history}}
\initial {A}
\entry{\code {alias}}{61}
\initial {B}
-\entry{\code {bg}}{126}
+\entry{\code {bg}}{127}
\entry{\code {bind}}{61}
\entry{\code {break}}{53}
\entry{\code {builtin}}{63}
\entry{\code {caller}}{63}
\entry{\code {cd}}{53}
\entry{\code {command}}{63}
-\entry{\code {compgen}}{161}
-\entry{\code {complete}}{162}
-\entry{\code {compopt}}{165}
+\entry{\code {compgen}}{162}
+\entry{\code {complete}}{163}
+\entry{\code {compopt}}{166}
\entry{\code {continue}}{54}
\initial {D}
\entry{\code {declare}}{64}
\entry{\code {dirs}}{112}
-\entry{\code {disown}}{128}
+\entry{\code {disown}}{129}
\initial {E}
\entry{\code {echo}}{65}
\entry{\code {enable}}{66}
\entry{\code {export}}{54}
\initial {F}
\entry{\code {false}}{55}
-\entry{\code {fc}}{169}
-\entry{\code {fg}}{127}
+\entry{\code {fc}}{170}
+\entry{\code {fg}}{128}
\initial {G}
\entry{\code {getopts}}{55}
\initial {H}
\entry{\code {hash}}{56}
\entry{\code {help}}{67}
-\entry{\code {history}}{170}
+\entry{\code {history}}{171}
\initial {J}
-\entry{\code {jobs}}{127}
+\entry{\code {jobs}}{128}
\initial {K}
-\entry{\code {kill}}{127}
+\entry{\code {kill}}{128}
\initial {L}
\entry{\code {let}}{67}
\entry{\code {local}}{67}
\entry{\code {shift}}{57}
\entry{\code {shopt}}{78}
\entry{\code {source}}{72}
-\entry{\code {suspend}}{128}
+\entry{\code {suspend}}{129}
\initial {T}
\entry{\code {test}}{57}
\entry{\code {times}}{59}
\entry{\code {unalias}}{74}
\entry{\code {unset}}{61}
\initial {W}
-\entry{\code {wait}}{128}
+\entry{\code {wait}}{129}
\entry{startup files}{102}{startup files}
\entry{interactive shell}{104}{interactive shell}
\entry{shell, interactive}{104}{shell, interactive}
-\entry{expressions, conditional}{105}{expressions, conditional}
-\entry{arithmetic, shell}{107}{arithmetic, shell}
-\entry{shell arithmetic}{107}{shell arithmetic}
-\entry{expressions, arithmetic}{107}{expressions, arithmetic}
-\entry{evaluation, arithmetic}{107}{evaluation, arithmetic}
-\entry{arithmetic evaluation}{107}{arithmetic evaluation}
+\entry{expressions, conditional}{106}{expressions, conditional}
+\entry{arithmetic, shell}{108}{arithmetic, shell}
+\entry{shell arithmetic}{108}{shell arithmetic}
+\entry{expressions, arithmetic}{108}{expressions, arithmetic}
+\entry{evaluation, arithmetic}{108}{evaluation, arithmetic}
+\entry{arithmetic evaluation}{108}{arithmetic evaluation}
\entry{arithmetic operators}{108}{arithmetic operators}
\entry{unary arithmetic operators}{108}{unary arithmetic operators}
\entry{binary arithmetic operators}{108}{binary arithmetic operators}
\entry{POSIX Mode}{117}{POSIX Mode}
\entry{Compatibility Level}{122}{Compatibility Level}
\entry{Compatibility Mode}{122}{Compatibility Mode}
-\entry{job control}{125}{job control}
-\entry{foreground}{125}{foreground}
-\entry{background}{125}{background}
-\entry{suspending jobs}{125}{suspending jobs}
-\entry{Readline, how to use}{129}{Readline, how to use}
-\entry{interaction, readline}{130}{interaction, readline}
-\entry{notation, readline}{131}{notation, readline}
-\entry{command editing}{131}{command editing}
-\entry{editing command lines}{131}{editing command lines}
-\entry{killing text}{132}{killing text}
-\entry{yanking text}{132}{yanking text}
-\entry{kill ring}{132}{kill ring}
-\entry{initialization file, readline}{133}{initialization file, readline}
-\entry{variables, readline}{134}{variables, readline}
-\entry{programmable completion}{158}{programmable completion}
-\entry{completion builtins}{161}{completion builtins}
-\entry{History, how to use}{167}{History, how to use}
-\entry{command history}{168}{command history}
-\entry{history list}{168}{history list}
-\entry{history builtins}{169}{history builtins}
-\entry{history expansion}{171}{history expansion}
-\entry{event designators}{172}{event designators}
-\entry{history events}{172}{history events}
-\entry{installation}{175}{installation}
-\entry{configuration}{175}{configuration}
-\entry{Bash installation}{175}{Bash installation}
-\entry{Bash configuration}{175}{Bash configuration}
+\entry{job control}{126}{job control}
+\entry{foreground}{126}{foreground}
+\entry{background}{126}{background}
+\entry{suspending jobs}{126}{suspending jobs}
+\entry{Readline, how to use}{130}{Readline, how to use}
+\entry{interaction, readline}{131}{interaction, readline}
+\entry{notation, readline}{132}{notation, readline}
+\entry{command editing}{132}{command editing}
+\entry{editing command lines}{132}{editing command lines}
+\entry{killing text}{133}{killing text}
+\entry{yanking text}{133}{yanking text}
+\entry{kill ring}{133}{kill ring}
+\entry{initialization file, readline}{134}{initialization file, readline}
+\entry{variables, readline}{135}{variables, readline}
+\entry{programmable completion}{159}{programmable completion}
+\entry{completion builtins}{162}{completion builtins}
+\entry{History, how to use}{168}{History, how to use}
+\entry{command history}{169}{command history}
+\entry{history list}{169}{history list}
+\entry{history builtins}{170}{history builtins}
+\entry{history expansion}{172}{history expansion}
+\entry{event designators}{173}{event designators}
+\entry{history events}{173}{history events}
+\entry{installation}{176}{installation}
+\entry{configuration}{176}{configuration}
+\entry{Bash installation}{176}{Bash installation}
+\entry{Bash configuration}{176}{Bash configuration}
\initial {A}
\entry{alias expansion}{109}
-\entry{arithmetic evaluation}{107}
+\entry{arithmetic evaluation}{108}
\entry{arithmetic expansion}{37}
\entry{arithmetic operators}{108}
-\entry{arithmetic, shell}{107}
+\entry{arithmetic, shell}{108}
\entry{arrays}{110}
\initial {B}
-\entry{background}{125}
-\entry{Bash configuration}{175}
-\entry{Bash installation}{175}
+\entry{background}{126}
+\entry{Bash configuration}{176}
+\entry{Bash installation}{176}
\entry{binary arithmetic operators}{108}
\entry{bitwise arithmetic operators}{108}
\entry{Bourne shell}{5}
\entry{brace expansion}{25}
\entry{builtin}{3}
\initial {C}
-\entry{command editing}{131}
+\entry{command editing}{132}
\entry{command execution}{46}
\entry{command expansion}{45}
-\entry{command history}{168}
+\entry{command history}{169}
\entry{command search}{46}
\entry{command substitution}{36}
\entry{command timing}{10}
\entry{comments, shell}{9}
\entry{Compatibility Level}{122}
\entry{Compatibility Mode}{122}
-\entry{completion builtins}{161}
+\entry{completion builtins}{162}
\entry{conditional arithmetic operator}{108}
-\entry{configuration}{175}
+\entry{configuration}{176}
\entry{control operator}{3}
\entry{coprocess}{18}
\initial {D}
\entry{directory stack}{112}
\entry{dollar-single quote quoting}{6}
\initial {E}
-\entry{editing command lines}{131}
+\entry{editing command lines}{132}
\entry{environment}{48}
-\entry{evaluation, arithmetic}{107}
-\entry{event designators}{172}
+\entry{evaluation, arithmetic}{108}
+\entry{event designators}{173}
\entry{execution environment}{47}
\entry{exit status}{3, 48}
\entry{expansion}{25}
\entry{expansion, parameter}{27}
\entry{expansion, pathname}{39}
\entry{expansion, tilde}{26}
-\entry{expressions, arithmetic}{107}
-\entry{expressions, conditional}{105}
+\entry{expressions, arithmetic}{108}
+\entry{expressions, conditional}{106}
\initial {F}
\entry{field}{3}
\entry{filename}{3}
\entry{filename expansion}{39}
-\entry{foreground}{125}
+\entry{foreground}{126}
\entry{functions, shell}{19}
\initial {H}
-\entry{history builtins}{169}
-\entry{history events}{172}
-\entry{history expansion}{171}
-\entry{history list}{168}
-\entry{History, how to use}{167}
+\entry{history builtins}{170}
+\entry{history events}{173}
+\entry{history expansion}{172}
+\entry{history list}{169}
+\entry{History, how to use}{168}
\initial {I}
\entry{identifier}{3}
-\entry{initialization file, readline}{133}
-\entry{installation}{175}
-\entry{interaction, readline}{130}
+\entry{initialization file, readline}{134}
+\entry{installation}{176}
+\entry{interaction, readline}{131}
\entry{interactive shell}{102, 104}
\entry{internationalization}{7}
\entry{internationalized scripts}{8}
\initial {J}
\entry{job}{3}
-\entry{job control}{3, 125}
+\entry{job control}{3, 126}
\initial {K}
-\entry{kill ring}{132}
-\entry{killing text}{132}
+\entry{kill ring}{133}
+\entry{killing text}{133}
\initial {L}
\entry{localization}{7}
\entry{login shell}{102}
\initial {N}
\entry{name}{3}
\entry{native languages}{7}
-\entry{notation, readline}{131}
+\entry{notation, readline}{132}
\initial {O}
\entry{operator, shell}{3}
\initial {P}
\entry{process group}{3}
\entry{process group ID}{3}
\entry{process substitution}{38}
-\entry{programmable completion}{158}
+\entry{programmable completion}{159}
\entry{prompting}{114}
\initial {Q}
\entry{quoting}{6}
\entry{quoting, ANSI}{6}
\initial {R}
-\entry{Readline, how to use}{129}
+\entry{Readline, how to use}{130}
\entry{redirection}{41}
\entry{reserved word}{4}
\entry{reserved words}{9}
\entry{restricted shell}{115}
\entry{return status}{4}
\initial {S}
-\entry{shell arithmetic}{107}
+\entry{shell arithmetic}{108}
\entry{shell function}{19}
\entry{shell script}{50}
\entry{shell variable}{22}
\entry{special builtin}{4, 85}
\entry{startup files}{102}
\entry{string translations}{8}
-\entry{suspending jobs}{125}
+\entry{suspending jobs}{126}
\initial {T}
\entry{tilde expansion}{26}
\entry{token}{4}
\entry{unary arithmetic operators}{108}
\initial {V}
\entry{variable, shell}{22}
-\entry{variables, readline}{134}
+\entry{variables, readline}{135}
\initial {W}
\entry{word}{4}
\entry{word splitting}{38}
\initial {Y}
-\entry{yanking text}{132}
+\entry{yanking text}{133}
-\entry{beginning-of-line (C-a)}{147}{\code {beginning-of-line (C-a)}}
-\entry{end-of-line (C-e)}{147}{\code {end-of-line (C-e)}}
-\entry{forward-char (C-f)}{147}{\code {forward-char (C-f)}}
-\entry{backward-char (C-b)}{147}{\code {backward-char (C-b)}}
-\entry{forward-word (M-f)}{147}{\code {forward-word (M-f)}}
-\entry{backward-word (M-b)}{147}{\code {backward-word (M-b)}}
-\entry{shell-forward-word (M-C-f)}{147}{\code {shell-forward-word (M-C-f)}}
-\entry{shell-backward-word (M-C-b)}{147}{\code {shell-backward-word (M-C-b)}}
-\entry{previous-screen-line ()}{148}{\code {previous-screen-line ()}}
-\entry{next-screen-line ()}{148}{\code {next-screen-line ()}}
-\entry{clear-display (M-C-l)}{148}{\code {clear-display (M-C-l)}}
-\entry{clear-screen (C-l)}{148}{\code {clear-screen (C-l)}}
-\entry{redraw-current-line ()}{148}{\code {redraw-current-line ()}}
-\entry{accept-line (Newline or Return)}{148}{\code {accept-line (Newline or Return)}}
-\entry{previous-history (C-p)}{148}{\code {previous-history (C-p)}}
-\entry{next-history (C-n)}{148}{\code {next-history (C-n)}}
-\entry{beginning-of-history (M-<)}{148}{\code {beginning-of-history (M-<)}}
-\entry{end-of-history (M->)}{148}{\code {end-of-history (M->)}}
-\entry{reverse-search-history (C-r)}{148}{\code {reverse-search-history (C-r)}}
-\entry{forward-search-history (C-s)}{149}{\code {forward-search-history (C-s)}}
-\entry{non-incremental-reverse-search-history (M-p)}{149}{\code {non-incremental-reverse-search-history (M-p)}}
-\entry{non-incremental-forward-search-history (M-n)}{149}{\code {non-incremental-forward-search-history (M-n)}}
-\entry{history-search-backward ()}{149}{\code {history-search-backward ()}}
-\entry{history-search-forward ()}{149}{\code {history-search-forward ()}}
-\entry{history-substring-search-backward ()}{149}{\code {history-substring-search-backward ()}}
-\entry{history-substring-search-forward ()}{149}{\code {history-substring-search-forward ()}}
-\entry{yank-nth-arg (M-C-y)}{149}{\code {yank-nth-arg (M-C-y)}}
-\entry{yank-last-arg (M-. or M-_)}{149}{\code {yank-last-arg (M-. or M-_)}}
-\entry{operate-and-get-next (C-o)}{150}{\code {operate-and-get-next (C-o)}}
-\entry{fetch-history ()}{150}{\code {fetch-history ()}}
-\entry{end-of-file (usually C-d)}{150}{\code {\i {end-of-file} (usually C-d)}}
-\entry{delete-char (C-d)}{150}{\code {delete-char (C-d)}}
-\entry{backward-delete-char (Rubout)}{150}{\code {backward-delete-char (Rubout)}}
-\entry{forward-backward-delete-char ()}{150}{\code {forward-backward-delete-char ()}}
-\entry{quoted-insert (C-q or C-v)}{150}{\code {quoted-insert (C-q or C-v)}}
-\entry{self-insert (a, b, A, 1, !, ...{})}{150}{\code {self-insert (a, b, A, 1, !, \dots {})}}
-\entry{bracketed-paste-begin ()}{150}{\code {bracketed-paste-begin ()}}
-\entry{transpose-chars (C-t)}{151}{\code {transpose-chars (C-t)}}
-\entry{transpose-words (M-t)}{151}{\code {transpose-words (M-t)}}
-\entry{shell-transpose-words (M-C-t)}{151}{\code {shell-transpose-words (M-C-t)}}
-\entry{upcase-word (M-u)}{151}{\code {upcase-word (M-u)}}
-\entry{downcase-word (M-l)}{151}{\code {downcase-word (M-l)}}
-\entry{capitalize-word (M-c)}{151}{\code {capitalize-word (M-c)}}
-\entry{overwrite-mode ()}{151}{\code {overwrite-mode ()}}
-\entry{kill-line (C-k)}{151}{\code {kill-line (C-k)}}
-\entry{backward-kill-line (C-x Rubout)}{152}{\code {backward-kill-line (C-x Rubout)}}
-\entry{unix-line-discard (C-u)}{152}{\code {unix-line-discard (C-u)}}
-\entry{kill-whole-line ()}{152}{\code {kill-whole-line ()}}
-\entry{kill-word (M-d)}{152}{\code {kill-word (M-d)}}
-\entry{backward-kill-word (M-DEL)}{152}{\code {backward-kill-word (M-\key {DEL})}}
-\entry{shell-kill-word (M-C-d)}{152}{\code {shell-kill-word (M-C-d)}}
-\entry{shell-backward-kill-word ()}{152}{\code {shell-backward-kill-word ()}}
-\entry{unix-word-rubout (C-w)}{152}{\code {unix-word-rubout (C-w)}}
-\entry{unix-filename-rubout ()}{152}{\code {unix-filename-rubout ()}}
-\entry{delete-horizontal-space ()}{152}{\code {delete-horizontal-space ()}}
-\entry{kill-region ()}{152}{\code {kill-region ()}}
-\entry{copy-region-as-kill ()}{152}{\code {copy-region-as-kill ()}}
-\entry{copy-backward-word ()}{152}{\code {copy-backward-word ()}}
-\entry{copy-forward-word ()}{152}{\code {copy-forward-word ()}}
-\entry{yank (C-y)}{152}{\code {yank (C-y)}}
-\entry{yank-pop (M-y)}{153}{\code {yank-pop (M-y)}}
-\entry{digit-argument (M-0, M-1, ...{} M--)}{153}{\code {digit-argument (\kbd {M-0}, \kbd {M-1}, \dots {} \kbd {M--})}}
-\entry{universal-argument ()}{153}{\code {universal-argument ()}}
-\entry{complete (TAB)}{153}{\code {complete (\key {TAB})}}
-\entry{possible-completions (M-?)}{153}{\code {possible-completions (M-?)}}
-\entry{insert-completions (M-*)}{153}{\code {insert-completions (M-*)}}
-\entry{menu-complete ()}{153}{\code {menu-complete ()}}
-\entry{menu-complete-backward ()}{154}{\code {menu-complete-backward ()}}
-\entry{export-completions ()}{154}{\code {export-completions ()}}
-\entry{delete-char-or-list ()}{154}{\code {delete-char-or-list ()}}
-\entry{complete-filename (M-/)}{154}{\code {complete-filename (M-/)}}
-\entry{possible-filename-completions (C-x /)}{154}{\code {possible-filename-completions (C-x /)}}
-\entry{complete-username (M-~)}{154}{\code {complete-username (M-~)}}
-\entry{possible-username-completions (C-x ~)}{154}{\code {possible-username-completions (C-x ~)}}
-\entry{complete-variable (M-$)}{154}{\code {complete-variable (M-$)}}
-\entry{possible-variable-completions (C-x $)}{154}{\code {possible-variable-completions (C-x $)}}
-\entry{complete-hostname (M-@)}{154}{\code {complete-hostname (M-@)}}
-\entry{possible-hostname-completions (C-x @)}{155}{\code {possible-hostname-completions (C-x @)}}
-\entry{complete-command (M-!)}{155}{\code {complete-command (M-!)}}
-\entry{possible-command-completions (C-x !)}{155}{\code {possible-command-completions (C-x !)}}
-\entry{dynamic-complete-history (M-TAB)}{155}{\code {dynamic-complete-history (M-\key {TAB})}}
-\entry{dabbrev-expand ()}{155}{\code {dabbrev-expand ()}}
-\entry{complete-into-braces (M-{\indexlbrace })}{155}{\code {complete-into-braces (M-{\tt \char 123})}}
-\entry{start-kbd-macro (C-x ()}{155}{\code {start-kbd-macro (C-x ()}}
-\entry{end-kbd-macro (C-x ))}{155}{\code {end-kbd-macro (C-x ))}}
-\entry{call-last-kbd-macro (C-x e)}{155}{\code {call-last-kbd-macro (C-x e)}}
-\entry{print-last-kbd-macro ()}{155}{\code {print-last-kbd-macro ()}}
-\entry{re-read-init-file (C-x C-r)}{155}{\code {re-read-init-file (C-x C-r)}}
-\entry{abort (C-g)}{155}{\code {abort (C-g)}}
-\entry{do-lowercase-version (M-A, M-B, M-x, ...{})}{156}{\code {do-lowercase-version (M-A, M-B, M-\var {x}, \dots {})}}
-\entry{prefix-meta (ESC)}{156}{\code {prefix-meta (\key {ESC})}}
-\entry{undo (C-_ or C-x C-u)}{156}{\code {undo (C-_ or C-x C-u)}}
-\entry{revert-line (M-r)}{156}{\code {revert-line (M-r)}}
-\entry{tilde-expand (M-&)}{156}{\code {tilde-expand (M-&)}}
-\entry{set-mark (C-@)}{156}{\code {set-mark (C-@)}}
-\entry{exchange-point-and-mark (C-x C-x)}{156}{\code {exchange-point-and-mark (C-x C-x)}}
-\entry{character-search (C-])}{156}{\code {character-search (C-])}}
-\entry{character-search-backward (M-C-])}{156}{\code {character-search-backward (M-C-])}}
-\entry{skip-csi-sequence ()}{156}{\code {skip-csi-sequence ()}}
-\entry{insert-comment (M-#)}{156}{\code {insert-comment (M-#)}}
-\entry{dump-functions ()}{157}{\code {dump-functions ()}}
-\entry{dump-variables ()}{157}{\code {dump-variables ()}}
-\entry{dump-macros ()}{157}{\code {dump-macros ()}}
-\entry{execute-named-command (M-x)}{157}{\code {execute-named-command (M-x)}}
-\entry{spell-correct-word (C-x s)}{157}{\code {spell-correct-word (C-x s)}}
-\entry{glob-complete-word (M-g)}{157}{\code {glob-complete-word (M-g)}}
-\entry{glob-expand-word (C-x *)}{157}{\code {glob-expand-word (C-x *)}}
-\entry{glob-list-expansions (C-x g)}{157}{\code {glob-list-expansions (C-x g)}}
-\entry{shell-expand-line (M-C-e)}{157}{\code {shell-expand-line (M-C-e)}}
-\entry{shell-expand-and-requote-line ()}{157}{\code {shell-expand-and-requote-line ()}}
-\entry{history-expand-line (M-^)}{158}{\code {history-expand-line (M-^)}}
-\entry{magic-space ()}{158}{\code {magic-space ()}}
-\entry{alias-expand-line ()}{158}{\code {alias-expand-line ()}}
-\entry{history-and-alias-expand-line ()}{158}{\code {history-and-alias-expand-line ()}}
-\entry{insert-last-argument (M-. or M-_)}{158}{\code {insert-last-argument (M-. or M-_)}}
-\entry{edit-and-execute-command (C-x C-e)}{158}{\code {edit-and-execute-command (C-x C-e)}}
-\entry{display-shell-version (C-x C-v)}{158}{\code {display-shell-version (C-x C-v)}}
+\entry{beginning-of-line (C-a)}{148}{\code {beginning-of-line (C-a)}}
+\entry{end-of-line (C-e)}{148}{\code {end-of-line (C-e)}}
+\entry{forward-char (C-f)}{148}{\code {forward-char (C-f)}}
+\entry{backward-char (C-b)}{148}{\code {backward-char (C-b)}}
+\entry{forward-word (M-f)}{148}{\code {forward-word (M-f)}}
+\entry{backward-word (M-b)}{148}{\code {backward-word (M-b)}}
+\entry{shell-forward-word (M-C-f)}{148}{\code {shell-forward-word (M-C-f)}}
+\entry{shell-backward-word (M-C-b)}{148}{\code {shell-backward-word (M-C-b)}}
+\entry{previous-screen-line ()}{149}{\code {previous-screen-line ()}}
+\entry{next-screen-line ()}{149}{\code {next-screen-line ()}}
+\entry{clear-display (M-C-l)}{149}{\code {clear-display (M-C-l)}}
+\entry{clear-screen (C-l)}{149}{\code {clear-screen (C-l)}}
+\entry{redraw-current-line ()}{149}{\code {redraw-current-line ()}}
+\entry{accept-line (Newline or Return)}{149}{\code {accept-line (Newline or Return)}}
+\entry{previous-history (C-p)}{149}{\code {previous-history (C-p)}}
+\entry{next-history (C-n)}{149}{\code {next-history (C-n)}}
+\entry{beginning-of-history (M-<)}{149}{\code {beginning-of-history (M-<)}}
+\entry{end-of-history (M->)}{149}{\code {end-of-history (M->)}}
+\entry{reverse-search-history (C-r)}{149}{\code {reverse-search-history (C-r)}}
+\entry{forward-search-history (C-s)}{150}{\code {forward-search-history (C-s)}}
+\entry{non-incremental-reverse-search-history (M-p)}{150}{\code {non-incremental-reverse-search-history (M-p)}}
+\entry{non-incremental-forward-search-history (M-n)}{150}{\code {non-incremental-forward-search-history (M-n)}}
+\entry{history-search-backward ()}{150}{\code {history-search-backward ()}}
+\entry{history-search-forward ()}{150}{\code {history-search-forward ()}}
+\entry{history-substring-search-backward ()}{150}{\code {history-substring-search-backward ()}}
+\entry{history-substring-search-forward ()}{150}{\code {history-substring-search-forward ()}}
+\entry{yank-nth-arg (M-C-y)}{150}{\code {yank-nth-arg (M-C-y)}}
+\entry{yank-last-arg (M-. or M-_)}{150}{\code {yank-last-arg (M-. or M-_)}}
+\entry{operate-and-get-next (C-o)}{151}{\code {operate-and-get-next (C-o)}}
+\entry{fetch-history ()}{151}{\code {fetch-history ()}}
+\entry{end-of-file (usually C-d)}{151}{\code {\i {end-of-file} (usually C-d)}}
+\entry{delete-char (C-d)}{151}{\code {delete-char (C-d)}}
+\entry{backward-delete-char (Rubout)}{151}{\code {backward-delete-char (Rubout)}}
+\entry{forward-backward-delete-char ()}{151}{\code {forward-backward-delete-char ()}}
+\entry{quoted-insert (C-q or C-v)}{151}{\code {quoted-insert (C-q or C-v)}}
+\entry{self-insert (a, b, A, 1, !, ...{})}{151}{\code {self-insert (a, b, A, 1, !, \dots {})}}
+\entry{bracketed-paste-begin ()}{151}{\code {bracketed-paste-begin ()}}
+\entry{transpose-chars (C-t)}{152}{\code {transpose-chars (C-t)}}
+\entry{transpose-words (M-t)}{152}{\code {transpose-words (M-t)}}
+\entry{shell-transpose-words (M-C-t)}{152}{\code {shell-transpose-words (M-C-t)}}
+\entry{upcase-word (M-u)}{152}{\code {upcase-word (M-u)}}
+\entry{downcase-word (M-l)}{152}{\code {downcase-word (M-l)}}
+\entry{capitalize-word (M-c)}{152}{\code {capitalize-word (M-c)}}
+\entry{overwrite-mode ()}{152}{\code {overwrite-mode ()}}
+\entry{kill-line (C-k)}{152}{\code {kill-line (C-k)}}
+\entry{backward-kill-line (C-x Rubout)}{153}{\code {backward-kill-line (C-x Rubout)}}
+\entry{unix-line-discard (C-u)}{153}{\code {unix-line-discard (C-u)}}
+\entry{kill-whole-line ()}{153}{\code {kill-whole-line ()}}
+\entry{kill-word (M-d)}{153}{\code {kill-word (M-d)}}
+\entry{backward-kill-word (M-DEL)}{153}{\code {backward-kill-word (M-\key {DEL})}}
+\entry{shell-kill-word (M-C-d)}{153}{\code {shell-kill-word (M-C-d)}}
+\entry{shell-backward-kill-word ()}{153}{\code {shell-backward-kill-word ()}}
+\entry{unix-word-rubout (C-w)}{153}{\code {unix-word-rubout (C-w)}}
+\entry{unix-filename-rubout ()}{153}{\code {unix-filename-rubout ()}}
+\entry{delete-horizontal-space ()}{153}{\code {delete-horizontal-space ()}}
+\entry{kill-region ()}{153}{\code {kill-region ()}}
+\entry{copy-region-as-kill ()}{153}{\code {copy-region-as-kill ()}}
+\entry{copy-backward-word ()}{153}{\code {copy-backward-word ()}}
+\entry{copy-forward-word ()}{153}{\code {copy-forward-word ()}}
+\entry{yank (C-y)}{153}{\code {yank (C-y)}}
+\entry{yank-pop (M-y)}{154}{\code {yank-pop (M-y)}}
+\entry{digit-argument (M-0, M-1, ...{} M--)}{154}{\code {digit-argument (\kbd {M-0}, \kbd {M-1}, \dots {} \kbd {M--})}}
+\entry{universal-argument ()}{154}{\code {universal-argument ()}}
+\entry{complete (TAB)}{154}{\code {complete (\key {TAB})}}
+\entry{possible-completions (M-?)}{154}{\code {possible-completions (M-?)}}
+\entry{insert-completions (M-*)}{154}{\code {insert-completions (M-*)}}
+\entry{menu-complete ()}{154}{\code {menu-complete ()}}
+\entry{menu-complete-backward ()}{155}{\code {menu-complete-backward ()}}
+\entry{export-completions ()}{155}{\code {export-completions ()}}
+\entry{delete-char-or-list ()}{155}{\code {delete-char-or-list ()}}
+\entry{complete-filename (M-/)}{155}{\code {complete-filename (M-/)}}
+\entry{possible-filename-completions (C-x /)}{155}{\code {possible-filename-completions (C-x /)}}
+\entry{complete-username (M-~)}{155}{\code {complete-username (M-~)}}
+\entry{possible-username-completions (C-x ~)}{155}{\code {possible-username-completions (C-x ~)}}
+\entry{complete-variable (M-$)}{155}{\code {complete-variable (M-$)}}
+\entry{possible-variable-completions (C-x $)}{155}{\code {possible-variable-completions (C-x $)}}
+\entry{complete-hostname (M-@)}{155}{\code {complete-hostname (M-@)}}
+\entry{possible-hostname-completions (C-x @)}{156}{\code {possible-hostname-completions (C-x @)}}
+\entry{complete-command (M-!)}{156}{\code {complete-command (M-!)}}
+\entry{possible-command-completions (C-x !)}{156}{\code {possible-command-completions (C-x !)}}
+\entry{dynamic-complete-history (M-TAB)}{156}{\code {dynamic-complete-history (M-\key {TAB})}}
+\entry{dabbrev-expand ()}{156}{\code {dabbrev-expand ()}}
+\entry{complete-into-braces (M-{\indexlbrace })}{156}{\code {complete-into-braces (M-{\tt \char 123})}}
+\entry{start-kbd-macro (C-x ()}{156}{\code {start-kbd-macro (C-x ()}}
+\entry{end-kbd-macro (C-x ))}{156}{\code {end-kbd-macro (C-x ))}}
+\entry{call-last-kbd-macro (C-x e)}{156}{\code {call-last-kbd-macro (C-x e)}}
+\entry{print-last-kbd-macro ()}{156}{\code {print-last-kbd-macro ()}}
+\entry{re-read-init-file (C-x C-r)}{156}{\code {re-read-init-file (C-x C-r)}}
+\entry{abort (C-g)}{156}{\code {abort (C-g)}}
+\entry{do-lowercase-version (M-A, M-B, M-x, ...{})}{157}{\code {do-lowercase-version (M-A, M-B, M-\var {x}, \dots {})}}
+\entry{prefix-meta (ESC)}{157}{\code {prefix-meta (\key {ESC})}}
+\entry{undo (C-_ or C-x C-u)}{157}{\code {undo (C-_ or C-x C-u)}}
+\entry{revert-line (M-r)}{157}{\code {revert-line (M-r)}}
+\entry{tilde-expand (M-&)}{157}{\code {tilde-expand (M-&)}}
+\entry{set-mark (C-@)}{157}{\code {set-mark (C-@)}}
+\entry{exchange-point-and-mark (C-x C-x)}{157}{\code {exchange-point-and-mark (C-x C-x)}}
+\entry{character-search (C-])}{157}{\code {character-search (C-])}}
+\entry{character-search-backward (M-C-])}{157}{\code {character-search-backward (M-C-])}}
+\entry{skip-csi-sequence ()}{157}{\code {skip-csi-sequence ()}}
+\entry{insert-comment (M-#)}{157}{\code {insert-comment (M-#)}}
+\entry{dump-functions ()}{158}{\code {dump-functions ()}}
+\entry{dump-variables ()}{158}{\code {dump-variables ()}}
+\entry{dump-macros ()}{158}{\code {dump-macros ()}}
+\entry{execute-named-command (M-x)}{158}{\code {execute-named-command (M-x)}}
+\entry{spell-correct-word (C-x s)}{158}{\code {spell-correct-word (C-x s)}}
+\entry{glob-complete-word (M-g)}{158}{\code {glob-complete-word (M-g)}}
+\entry{glob-expand-word (C-x *)}{158}{\code {glob-expand-word (C-x *)}}
+\entry{glob-list-expansions (C-x g)}{158}{\code {glob-list-expansions (C-x g)}}
+\entry{shell-expand-line (M-C-e)}{158}{\code {shell-expand-line (M-C-e)}}
+\entry{shell-expand-and-requote-line ()}{158}{\code {shell-expand-and-requote-line ()}}
+\entry{history-expand-line (M-^)}{159}{\code {history-expand-line (M-^)}}
+\entry{magic-space ()}{159}{\code {magic-space ()}}
+\entry{alias-expand-line ()}{159}{\code {alias-expand-line ()}}
+\entry{history-and-alias-expand-line ()}{159}{\code {history-and-alias-expand-line ()}}
+\entry{insert-last-argument (M-. or M-_)}{159}{\code {insert-last-argument (M-. or M-_)}}
+\entry{edit-and-execute-command (C-x C-e)}{159}{\code {edit-and-execute-command (C-x C-e)}}
+\entry{display-shell-version (C-x C-v)}{159}{\code {display-shell-version (C-x C-v)}}
\initial {A}
-\entry{\code {abort (C-g)}}{155}
-\entry{\code {accept-line (Newline or Return)}}{148}
-\entry{\code {alias-expand-line ()}}{158}
+\entry{\code {abort (C-g)}}{156}
+\entry{\code {accept-line (Newline or Return)}}{149}
+\entry{\code {alias-expand-line ()}}{159}
\initial {B}
-\entry{\code {backward-char (C-b)}}{147}
-\entry{\code {backward-delete-char (Rubout)}}{150}
-\entry{\code {backward-kill-line (C-x Rubout)}}{152}
-\entry{\code {backward-kill-word (M-\key {DEL})}}{152}
-\entry{\code {backward-word (M-b)}}{147}
-\entry{\code {beginning-of-history (M-<)}}{148}
-\entry{\code {beginning-of-line (C-a)}}{147}
-\entry{\code {bracketed-paste-begin ()}}{150}
+\entry{\code {backward-char (C-b)}}{148}
+\entry{\code {backward-delete-char (Rubout)}}{151}
+\entry{\code {backward-kill-line (C-x Rubout)}}{153}
+\entry{\code {backward-kill-word (M-\key {DEL})}}{153}
+\entry{\code {backward-word (M-b)}}{148}
+\entry{\code {beginning-of-history (M-<)}}{149}
+\entry{\code {beginning-of-line (C-a)}}{148}
+\entry{\code {bracketed-paste-begin ()}}{151}
\initial {C}
-\entry{\code {call-last-kbd-macro (C-x e)}}{155}
-\entry{\code {capitalize-word (M-c)}}{151}
-\entry{\code {character-search (C-])}}{156}
-\entry{\code {character-search-backward (M-C-])}}{156}
-\entry{\code {clear-display (M-C-l)}}{148}
-\entry{\code {clear-screen (C-l)}}{148}
-\entry{\code {complete (\key {TAB})}}{153}
-\entry{\code {complete-command (M-!)}}{155}
-\entry{\code {complete-filename (M-/)}}{154}
-\entry{\code {complete-hostname (M-@)}}{154}
-\entry{\code {complete-into-braces (M-{\tt \char 123})}}{155}
-\entry{\code {complete-username (M-~)}}{154}
-\entry{\code {complete-variable (M-$)}}{154}
-\entry{\code {copy-backward-word ()}}{152}
-\entry{\code {copy-forward-word ()}}{152}
-\entry{\code {copy-region-as-kill ()}}{152}
+\entry{\code {call-last-kbd-macro (C-x e)}}{156}
+\entry{\code {capitalize-word (M-c)}}{152}
+\entry{\code {character-search (C-])}}{157}
+\entry{\code {character-search-backward (M-C-])}}{157}
+\entry{\code {clear-display (M-C-l)}}{149}
+\entry{\code {clear-screen (C-l)}}{149}
+\entry{\code {complete (\key {TAB})}}{154}
+\entry{\code {complete-command (M-!)}}{156}
+\entry{\code {complete-filename (M-/)}}{155}
+\entry{\code {complete-hostname (M-@)}}{155}
+\entry{\code {complete-into-braces (M-{\tt \char 123})}}{156}
+\entry{\code {complete-username (M-~)}}{155}
+\entry{\code {complete-variable (M-$)}}{155}
+\entry{\code {copy-backward-word ()}}{153}
+\entry{\code {copy-forward-word ()}}{153}
+\entry{\code {copy-region-as-kill ()}}{153}
\initial {D}
-\entry{\code {dabbrev-expand ()}}{155}
-\entry{\code {delete-char (C-d)}}{150}
-\entry{\code {delete-char-or-list ()}}{154}
-\entry{\code {delete-horizontal-space ()}}{152}
-\entry{\code {digit-argument (\kbd {M-0}, \kbd {M-1}, \dots {} \kbd {M--})}}{153}
-\entry{\code {display-shell-version (C-x C-v)}}{158}
-\entry{\code {do-lowercase-version (M-A, M-B, M-\var {x}, \dots {})}}{156}
-\entry{\code {downcase-word (M-l)}}{151}
-\entry{\code {dump-functions ()}}{157}
-\entry{\code {dump-macros ()}}{157}
-\entry{\code {dump-variables ()}}{157}
-\entry{\code {dynamic-complete-history (M-\key {TAB})}}{155}
+\entry{\code {dabbrev-expand ()}}{156}
+\entry{\code {delete-char (C-d)}}{151}
+\entry{\code {delete-char-or-list ()}}{155}
+\entry{\code {delete-horizontal-space ()}}{153}
+\entry{\code {digit-argument (\kbd {M-0}, \kbd {M-1}, \dots {} \kbd {M--})}}{154}
+\entry{\code {display-shell-version (C-x C-v)}}{159}
+\entry{\code {do-lowercase-version (M-A, M-B, M-\var {x}, \dots {})}}{157}
+\entry{\code {downcase-word (M-l)}}{152}
+\entry{\code {dump-functions ()}}{158}
+\entry{\code {dump-macros ()}}{158}
+\entry{\code {dump-variables ()}}{158}
+\entry{\code {dynamic-complete-history (M-\key {TAB})}}{156}
\initial {E}
-\entry{\code {edit-and-execute-command (C-x C-e)}}{158}
-\entry{\code {end-kbd-macro (C-x ))}}{155}
-\entry{\code {\i {end-of-file} (usually C-d)}}{150}
-\entry{\code {end-of-history (M->)}}{148}
-\entry{\code {end-of-line (C-e)}}{147}
-\entry{\code {exchange-point-and-mark (C-x C-x)}}{156}
-\entry{\code {execute-named-command (M-x)}}{157}
-\entry{\code {export-completions ()}}{154}
+\entry{\code {edit-and-execute-command (C-x C-e)}}{159}
+\entry{\code {end-kbd-macro (C-x ))}}{156}
+\entry{\code {\i {end-of-file} (usually C-d)}}{151}
+\entry{\code {end-of-history (M->)}}{149}
+\entry{\code {end-of-line (C-e)}}{148}
+\entry{\code {exchange-point-and-mark (C-x C-x)}}{157}
+\entry{\code {execute-named-command (M-x)}}{158}
+\entry{\code {export-completions ()}}{155}
\initial {F}
-\entry{\code {fetch-history ()}}{150}
-\entry{\code {forward-backward-delete-char ()}}{150}
-\entry{\code {forward-char (C-f)}}{147}
-\entry{\code {forward-search-history (C-s)}}{149}
-\entry{\code {forward-word (M-f)}}{147}
+\entry{\code {fetch-history ()}}{151}
+\entry{\code {forward-backward-delete-char ()}}{151}
+\entry{\code {forward-char (C-f)}}{148}
+\entry{\code {forward-search-history (C-s)}}{150}
+\entry{\code {forward-word (M-f)}}{148}
\initial {G}
-\entry{\code {glob-complete-word (M-g)}}{157}
-\entry{\code {glob-expand-word (C-x *)}}{157}
-\entry{\code {glob-list-expansions (C-x g)}}{157}
+\entry{\code {glob-complete-word (M-g)}}{158}
+\entry{\code {glob-expand-word (C-x *)}}{158}
+\entry{\code {glob-list-expansions (C-x g)}}{158}
\initial {H}
-\entry{\code {history-and-alias-expand-line ()}}{158}
-\entry{\code {history-expand-line (M-^)}}{158}
-\entry{\code {history-search-backward ()}}{149}
-\entry{\code {history-search-forward ()}}{149}
-\entry{\code {history-substring-search-backward ()}}{149}
-\entry{\code {history-substring-search-forward ()}}{149}
+\entry{\code {history-and-alias-expand-line ()}}{159}
+\entry{\code {history-expand-line (M-^)}}{159}
+\entry{\code {history-search-backward ()}}{150}
+\entry{\code {history-search-forward ()}}{150}
+\entry{\code {history-substring-search-backward ()}}{150}
+\entry{\code {history-substring-search-forward ()}}{150}
\initial {I}
-\entry{\code {insert-comment (M-#)}}{156}
-\entry{\code {insert-completions (M-*)}}{153}
-\entry{\code {insert-last-argument (M-. or M-_)}}{158}
+\entry{\code {insert-comment (M-#)}}{157}
+\entry{\code {insert-completions (M-*)}}{154}
+\entry{\code {insert-last-argument (M-. or M-_)}}{159}
\initial {K}
-\entry{\code {kill-line (C-k)}}{151}
-\entry{\code {kill-region ()}}{152}
-\entry{\code {kill-whole-line ()}}{152}
-\entry{\code {kill-word (M-d)}}{152}
+\entry{\code {kill-line (C-k)}}{152}
+\entry{\code {kill-region ()}}{153}
+\entry{\code {kill-whole-line ()}}{153}
+\entry{\code {kill-word (M-d)}}{153}
\initial {M}
-\entry{\code {magic-space ()}}{158}
-\entry{\code {menu-complete ()}}{153}
-\entry{\code {menu-complete-backward ()}}{154}
+\entry{\code {magic-space ()}}{159}
+\entry{\code {menu-complete ()}}{154}
+\entry{\code {menu-complete-backward ()}}{155}
\initial {N}
-\entry{\code {next-history (C-n)}}{148}
-\entry{\code {next-screen-line ()}}{148}
-\entry{\code {non-incremental-forward-search-history (M-n)}}{149}
-\entry{\code {non-incremental-reverse-search-history (M-p)}}{149}
+\entry{\code {next-history (C-n)}}{149}
+\entry{\code {next-screen-line ()}}{149}
+\entry{\code {non-incremental-forward-search-history (M-n)}}{150}
+\entry{\code {non-incremental-reverse-search-history (M-p)}}{150}
\initial {O}
-\entry{\code {operate-and-get-next (C-o)}}{150}
-\entry{\code {overwrite-mode ()}}{151}
+\entry{\code {operate-and-get-next (C-o)}}{151}
+\entry{\code {overwrite-mode ()}}{152}
\initial {P}
-\entry{\code {possible-command-completions (C-x !)}}{155}
-\entry{\code {possible-completions (M-?)}}{153}
-\entry{\code {possible-filename-completions (C-x /)}}{154}
-\entry{\code {possible-hostname-completions (C-x @)}}{155}
-\entry{\code {possible-username-completions (C-x ~)}}{154}
-\entry{\code {possible-variable-completions (C-x $)}}{154}
-\entry{\code {prefix-meta (\key {ESC})}}{156}
-\entry{\code {previous-history (C-p)}}{148}
-\entry{\code {previous-screen-line ()}}{148}
-\entry{\code {print-last-kbd-macro ()}}{155}
+\entry{\code {possible-command-completions (C-x !)}}{156}
+\entry{\code {possible-completions (M-?)}}{154}
+\entry{\code {possible-filename-completions (C-x /)}}{155}
+\entry{\code {possible-hostname-completions (C-x @)}}{156}
+\entry{\code {possible-username-completions (C-x ~)}}{155}
+\entry{\code {possible-variable-completions (C-x $)}}{155}
+\entry{\code {prefix-meta (\key {ESC})}}{157}
+\entry{\code {previous-history (C-p)}}{149}
+\entry{\code {previous-screen-line ()}}{149}
+\entry{\code {print-last-kbd-macro ()}}{156}
\initial {Q}
-\entry{\code {quoted-insert (C-q or C-v)}}{150}
+\entry{\code {quoted-insert (C-q or C-v)}}{151}
\initial {R}
-\entry{\code {re-read-init-file (C-x C-r)}}{155}
-\entry{\code {redraw-current-line ()}}{148}
-\entry{\code {reverse-search-history (C-r)}}{148}
-\entry{\code {revert-line (M-r)}}{156}
+\entry{\code {re-read-init-file (C-x C-r)}}{156}
+\entry{\code {redraw-current-line ()}}{149}
+\entry{\code {reverse-search-history (C-r)}}{149}
+\entry{\code {revert-line (M-r)}}{157}
\initial {S}
-\entry{\code {self-insert (a, b, A, 1, !, \dots {})}}{150}
-\entry{\code {set-mark (C-@)}}{156}
-\entry{\code {shell-backward-kill-word ()}}{152}
-\entry{\code {shell-backward-word (M-C-b)}}{147}
-\entry{\code {shell-expand-and-requote-line ()}}{157}
-\entry{\code {shell-expand-line (M-C-e)}}{157}
-\entry{\code {shell-forward-word (M-C-f)}}{147}
-\entry{\code {shell-kill-word (M-C-d)}}{152}
-\entry{\code {shell-transpose-words (M-C-t)}}{151}
-\entry{\code {skip-csi-sequence ()}}{156}
-\entry{\code {spell-correct-word (C-x s)}}{157}
-\entry{\code {start-kbd-macro (C-x ()}}{155}
+\entry{\code {self-insert (a, b, A, 1, !, \dots {})}}{151}
+\entry{\code {set-mark (C-@)}}{157}
+\entry{\code {shell-backward-kill-word ()}}{153}
+\entry{\code {shell-backward-word (M-C-b)}}{148}
+\entry{\code {shell-expand-and-requote-line ()}}{158}
+\entry{\code {shell-expand-line (M-C-e)}}{158}
+\entry{\code {shell-forward-word (M-C-f)}}{148}
+\entry{\code {shell-kill-word (M-C-d)}}{153}
+\entry{\code {shell-transpose-words (M-C-t)}}{152}
+\entry{\code {skip-csi-sequence ()}}{157}
+\entry{\code {spell-correct-word (C-x s)}}{158}
+\entry{\code {start-kbd-macro (C-x ()}}{156}
\initial {T}
-\entry{\code {tilde-expand (M-&)}}{156}
-\entry{\code {transpose-chars (C-t)}}{151}
-\entry{\code {transpose-words (M-t)}}{151}
+\entry{\code {tilde-expand (M-&)}}{157}
+\entry{\code {transpose-chars (C-t)}}{152}
+\entry{\code {transpose-words (M-t)}}{152}
\initial {U}
-\entry{\code {undo (C-_ or C-x C-u)}}{156}
-\entry{\code {universal-argument ()}}{153}
-\entry{\code {unix-filename-rubout ()}}{152}
-\entry{\code {unix-line-discard (C-u)}}{152}
-\entry{\code {unix-word-rubout (C-w)}}{152}
-\entry{\code {upcase-word (M-u)}}{151}
+\entry{\code {undo (C-_ or C-x C-u)}}{157}
+\entry{\code {universal-argument ()}}{154}
+\entry{\code {unix-filename-rubout ()}}{153}
+\entry{\code {unix-line-discard (C-u)}}{153}
+\entry{\code {unix-word-rubout (C-w)}}{153}
+\entry{\code {upcase-word (M-u)}}{152}
\initial {Y}
-\entry{\code {yank (C-y)}}{152}
-\entry{\code {yank-last-arg (M-. or M-_)}}{149}
-\entry{\code {yank-nth-arg (M-C-y)}}{149}
-\entry{\code {yank-pop (M-y)}}{153}
+\entry{\code {yank (C-y)}}{153}
+\entry{\code {yank-last-arg (M-. or M-_)}}{150}
+\entry{\code {yank-nth-arg (M-C-y)}}{150}
+\entry{\code {yank-pop (M-y)}}{154}
<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 March 2026).
+the Bash shell (version 5.3, 29 April 2026).
-This is Edition 5.3, last updated 16 March 2026,
+This is Edition 5.3, last updated 29 April 2026,
of The GNU Bash Reference Manual,
for Bash, Version 5.3.
<h1 class="top" id="Bash-Features-1"><span>Bash Features<a class="copiable-link" href="#Bash-Features-1"> ¶</a></span></h1>
<p>This text is a brief description of the features that are present in
-the Bash shell (version 5.3, 16 March 2026).
+the Bash shell (version 5.3, 29 April 2026).
The Bash home page is <a class="url" href="http://www.gnu.org/software/bash/">http://www.gnu.org/software/bash/</a>.
</p>
-<p>This is Edition 5.3, last updated 16 March 2026,
+<p>This is Edition 5.3, last updated 29 April 2026,
of <cite class="cite">The GNU Bash Reference Manual</cite>,
for <code class="code">Bash</code>, Version 5.3.
</p>
<h3 class="section" id="Shell-Scripts-1"><span>3.8 Shell Scripts<a class="copiable-link" href="#Shell-Scripts-1"> ¶</a></span></h3>
<a class="index-entry-id" id="index-shell-script"></a>
-<p>A shell script is a text file containing shell commands.
+<p>A <em class="dfn">shell script</em> is a text file containing shell commands.
When such a file is used as the first non-option argument when
invoking Bash, and neither the <samp class="option">-c</samp> nor <samp class="option">-s</samp> option
is supplied (see <a class="pxref" href="#Invoking-Bash">Invoking Bash</a>),
or one started with the <samp class="option">-i</samp> option.
See <a class="xref" href="#Interactive-Shells">Interactive Shells</a>, for more information.
</p>
+<p>A <em class="dfn">non-interactive shell</em> is, not surprisingly, one that does not
+satisfy the tests for interactivity given above.
+A non-interactive shell is usually started to run commands from a script
+file supplied as an argument (see <a class="pxref" href="#Shell-Scripts">Shell Scripts</a>)
+or from a string supplied with the
+<samp class="option">-c</samp>
+option.
+</p>
<p>If arguments remain after option processing, and neither the
<samp class="option">-c</samp> nor the <samp class="option">-s</samp>
option has been supplied, the first argument is treated as
<code class="env">PATH</code>
for the script.
</p>
+<p>For example, the following command starts an interactive shell:
+</p>
+<div class="example">
+<pre class="example-preformatted">bash
+</pre></div>
+
+<p>whereas this command will read and execute commands from <samp class="file">filename</samp>:
+</p>
+<div class="example">
+<pre class="example-preformatted">bash filename
+</pre></div>
+
+<p>This command will execute ‘<samp class="samp">echo hello</samp>’:
+</p>
+<div class="example">
+<pre class="example-preformatted">bash -c 'echo hello'
+</pre></div>
+
+<p>and this will execute the same command
+read from the standard input:
+</p>
+<div class="example">
+<pre class="example-preformatted">echo echo hello | bash
+</pre></div>
+
<hr>
</div>
<div class="section-level-extent" id="Bash-Startup-Files">
<p>This section describes how Bash executes its startup files.
If any of the files exist but cannot be read, Bash reports an error.
-Tildes are expanded in filenames as described above under
+Tildes in filenames are expanded as described above under
Tilde Expansion (see <a class="pxref" href="#Tilde-Expansion">Tilde Expansion</a>).
</p>
<p>Interactive shells are described in <a class="ref" href="#Interactive-Shells">Interactive Shells</a>.
In this mode, interactive shells expand the <code class="env">ENV</code> variable
and read and execute commands from the file whose name is the
expanded value.
-No other startup files are read.
+A posix-mode shell does not attempt to read any other startup files,
+even when invoked as a login shell.
</p>
<h4 class="subsubheading" id="Invoked-by-remote-shell-daemon"><span>Invoked by remote shell daemon<a class="copiable-link" href="#Invoked-by-remote-shell-daemon"> ¶</a></span></h4>
<p>Bash
attempts to determine when it is being run with its standard input
connected to a network connection, as when executed by
-the historical and rarely-seen remote shell daemon, usually <code class="code">rshd</code>,
-or the secure shell daemon <code class="code">sshd</code>.
+the secure shell daemon <code class="code">sshd</code>.
+or the historical and rarely-seen remote shell daemon, usually <code class="code">rshd</code>.
If
Bash
determines it is being run non-interactively in this fashion,
option makes Bash use a different file instead of
<samp class="file">~/.bashrc</samp>,
but neither
-<code class="code">rshd</code> nor <code class="code">sshd</code> generally invoke the shell with those
+<code class="command">sshd</code> nor <code class="command">rshd</code> generally invoke the shell with those
options or allow them to be specified.
</p>
<h4 class="subsubheading" id="Invoked-with-unequal-effective-and-real-uid_002fgids"><span>Invoked with unequal effective and real <small class="sc">UID/GID</small>s<a class="copiable-link" href="#Invoked-with-unequal-effective-and-real-uid_002fgids"> ¶</a></span></h4>
variables, if they appear in the environment, are ignored, and the effective
user id is set to the real user id.
If the <samp class="option">-p</samp> option is supplied at invocation, the startup behavior is
-the same, but the effective user id is not reset.
+the same, but Bash does not reset the effective user id.
</p>
<hr>
</div>
limit on the size of an array, nor any requirement that members
be indexed or assigned contiguously.
Indexed arrays are referenced using arithmetic expressions
-that must expand to an integer (see <a class="pxref" href="#Shell-Arithmetic">Shell Arithmetic</a>))
+that must expand to an integer (see <a class="pxref" href="#Shell-Arithmetic">Shell Arithmetic</a>)
and are zero-based;
associative arrays use arbitrary strings.
Unless otherwise noted, indexed array indices must be non-negative integers.
bashref.texi.
This text is a brief description of the features that are present in the
-Bash shell (version 5.3, 16 March 2026).
+Bash shell (version 5.3, 29 April 2026).
- This is Edition 5.3, last updated 16 March 2026, of ‘The GNU Bash
+ This is Edition 5.3, last updated 29 April 2026, of ‘The GNU Bash
Reference Manual’, for ‘Bash’, Version 5.3.
Copyright © 1988-2026 Free Software Foundation, Inc.
*************
This text is a brief description of the features that are present in the
-Bash shell (version 5.3, 16 March 2026). The Bash home page is
+Bash shell (version 5.3, 29 April 2026). The Bash home page is
<http://www.gnu.org/software/bash/>.
- This is Edition 5.3, last updated 16 March 2026, of ‘The GNU Bash
+ This is Edition 5.3, last updated 29 April 2026, of ‘The GNU Bash
Reference Manual’, for ‘Bash’, Version 5.3.
Bash contains features that appear in other popular shells, and some
3.8 Shell Scripts
=================
-A shell script is a text file containing shell commands. When such a
+A “shell script” is a text file containing shell commands. When such a
file is used as the first non-option argument when invoking Bash, and
neither the ‘-c’ nor ‘-s’ option is supplied (*note Invoking Bash::),
Bash reads and executes commands from the file, then exits. This mode
determined by isatty(3)), or one started with the ‘-i’ option. *Note
Interactive Shells::, for more information.
+ A “non-interactive shell” is, not surprisingly, one that does not
+satisfy the tests for interactivity given above. A non-interactive
+shell is usually started to run commands from a script file supplied as
+an argument (*note Shell Scripts::) or from a string supplied with the
+‘-c’ option.
+
If arguments remain after option processing, and neither the ‘-c’ nor
the ‘-s’ option has been supplied, the first argument is treated as the
name of a file containing shell commands (*note Shell Scripts::). When
to open the file in the current directory, and, if no file is found,
searches the directories in ‘PATH’ for the script.
+ For example, the following command starts an interactive shell:
+
+ bash
+
+whereas this command will read and execute commands from ‘filename’:
+
+ bash filename
+
+This command will execute ‘echo hello’:
+
+ bash -c 'echo hello'
+
+and this will execute the same command read from the standard input:
+
+ echo echo hello | bash
+
\1f
File: bashref.info, Node: Bash Startup Files, Next: Interactive Shells, Prev: Invoking Bash, Up: Bash Features
======================
This section describes how Bash executes its startup files. If any of
-the files exist but cannot be read, Bash reports an error. Tildes are
-expanded in filenames as described above under Tilde Expansion (*note
+the files exist but cannot be read, Bash reports an error. Tildes in
+filenames are expanded as described above under Tilde Expansion (*note
Tilde Expansion::).
Interactive shells are described in *note Interactive Shells::.
When Bash is started in POSIX mode, as with the ‘--posix’ command line
option, it follows the POSIX standard for startup files. In this mode,
interactive shells expand the ‘ENV’ variable and read and execute
-commands from the file whose name is the expanded value. No other
-startup files are read.
+commands from the file whose name is the expanded value. A posix-mode
+shell does not attempt to read any other startup files, even when
+invoked as a login shell.
Invoked by remote shell daemon
..............................
Bash attempts to determine when it is being run with its standard input
-connected to a network connection, as when executed by the historical
-and rarely-seen remote shell daemon, usually ‘rshd’, or the secure shell
-daemon ‘sshd’. If Bash determines it is being run non-interactively in
+connected to a network connection, as when executed by the secure shell
+daemon ‘sshd’. or the historical and rarely-seen remote shell daemon,
+usually ‘rshd’. If Bash determines it is being run non-interactively in
this fashion, it reads and executes commands from ‘~/.bashrc’, if that
file exists and is readable. Bash does not read this file if invoked as
‘sh’. The ‘--norc’ option inhibits this behavior, and the ‘--rcfile’
option makes Bash use a different file instead of ‘~/.bashrc’, but
-neither ‘rshd’ nor ‘sshd’ generally invoke the shell with those options
+neither ‘sshd’ nor ‘rshd’ generally invoke the shell with those options
or allow them to be specified.
Invoked with unequal effective and real UID/GIDs
the ‘SHELLOPTS’, ‘BASHOPTS’, ‘CDPATH’, and ‘GLOBIGNORE’ variables, if
they appear in the environment, are ignored, and the effective user id
is set to the real user id. If the ‘-p’ option is supplied at
-invocation, the startup behavior is the same, but the effective user id
-is not reset.
+invocation, the startup behavior is the same, but Bash does not reset
+the effective user id.
\1f
File: bashref.info, Node: Interactive Shells, Next: Bash Conditional Expressions, Prev: Bash Startup Files, Up: Bash Features
Node: Exit Status\7f143036
Node: Signals\7f145098
Node: Shell Scripts\7f150049
-Node: Shell Builtin Commands\7f153350
-Node: Bourne Shell Builtins\7f155694
-Node: Bash Builtins\7f182416
-Node: Modifying Shell Behavior\7f220154
-Node: The Set Builtin\7f220499
-Node: The Shopt Builtin\7f232496
-Node: Special Builtins\7f249552
-Node: Shell Variables\7f250544
-Node: Bourne Shell Variables\7f250981
-Node: Bash Variables\7f253492
-Node: Bash Features\7f292779
-Node: Invoking Bash\7f293796
-Node: Bash Startup Files\7f300383
-Node: Interactive Shells\7f305628
-Node: What is an Interactive Shell?\7f306039
-Node: Is this Shell Interactive?\7f306704
-Node: Interactive Shell Behavior\7f307531
-Node: Bash Conditional Expressions\7f311295
-Node: Shell Arithmetic\7f316715
-Node: Aliases\7f320045
-Node: Arrays\7f323182
-Node: The Directory Stack\7f330887
-Node: Directory Stack Builtins\7f331687
-Node: Controlling the Prompt\7f336135
-Node: The Restricted Shell\7f339022
-Node: Bash POSIX Mode\7f342118
-Node: Shell Compatibility Mode\7f361937
-Node: Job Control\7f370947
-Node: Job Control Basics\7f371407
-Node: Job Control Builtins\7f377778
-Node: Job Control Variables\7f384569
-Node: Command Line Editing\7f385803
-Node: Introduction and Notation\7f387509
-Node: Readline Interaction\7f389864
-Node: Readline Bare Essentials\7f391055
-Node: Readline Movement Commands\7f392866
-Node: Readline Killing Commands\7f393865
-Node: Readline Arguments\7f395891
-Node: Searching\7f396984
-Node: Readline Init File\7f399230
-Node: Readline Init File Syntax\7f400536
-Node: Conditional Init Constructs\7f427490
-Node: Sample Init File\7f431878
-Node: Bindable Readline Commands\7f435001
-Node: Commands For Moving\7f436542
-Node: Commands For History\7f439009
-Node: Commands For Text\7f444403
-Node: Commands For Killing\7f448531
-Node: Numeric Arguments\7f451322
-Node: Commands For Completion\7f452477
-Node: Keyboard Macros\7f458176
-Node: Miscellaneous Commands\7f458880
-Node: Readline vi Mode\7f466426
-Node: Programmable Completion\7f467406
-Node: Programmable Completion Builtins\7f477145
-Node: A Programmable Completion Example\7f488885
-Node: Using History Interactively\7f494233
-Node: Bash History Facilities\7f494917
-Node: Bash History Builtins\7f498655
-Node: History Interaction\7f506253
-Node: Event Designators\7f511206
-Node: Word Designators\7f512787
-Node: Modifiers\7f515182
-Node: Installing Bash\7f517122
-Node: Basic Installation\7f518241
-Node: Compilers and Options\7f522120
-Node: Compiling For Multiple Architectures\7f522873
-Node: Installation Names\7f524629
-Node: Specifying the System Type\7f526866
-Node: Sharing Defaults\7f527615
-Node: Operation Controls\7f528332
-Node: Optional Features\7f529354
-Node: Reporting Bugs\7f542080
-Node: Major Differences From The Bourne Shell\7f543440
-Node: GNU Free Documentation License\7f564870
-Node: Indexes\7f590050
-Node: Builtin Index\7f590504
-Node: Reserved Word Index\7f597605
-Node: Variable Index\7f600053
-Node: Function Index\7f617469
-Node: Concept Index\7f631605
+Node: Shell Builtin Commands\7f153356
+Node: Bourne Shell Builtins\7f155700
+Node: Bash Builtins\7f182422
+Node: Modifying Shell Behavior\7f220160
+Node: The Set Builtin\7f220505
+Node: The Shopt Builtin\7f232502
+Node: Special Builtins\7f249558
+Node: Shell Variables\7f250550
+Node: Bourne Shell Variables\7f250987
+Node: Bash Variables\7f253498
+Node: Bash Features\7f292785
+Node: Invoking Bash\7f293802
+Node: Bash Startup Files\7f301035
+Node: Interactive Shells\7f306360
+Node: What is an Interactive Shell?\7f306771
+Node: Is this Shell Interactive?\7f307436
+Node: Interactive Shell Behavior\7f308263
+Node: Bash Conditional Expressions\7f312027
+Node: Shell Arithmetic\7f317447
+Node: Aliases\7f320777
+Node: Arrays\7f323914
+Node: The Directory Stack\7f331619
+Node: Directory Stack Builtins\7f332419
+Node: Controlling the Prompt\7f336867
+Node: The Restricted Shell\7f339754
+Node: Bash POSIX Mode\7f342850
+Node: Shell Compatibility Mode\7f362669
+Node: Job Control\7f371679
+Node: Job Control Basics\7f372139
+Node: Job Control Builtins\7f378510
+Node: Job Control Variables\7f385301
+Node: Command Line Editing\7f386535
+Node: Introduction and Notation\7f388241
+Node: Readline Interaction\7f390596
+Node: Readline Bare Essentials\7f391787
+Node: Readline Movement Commands\7f393598
+Node: Readline Killing Commands\7f394597
+Node: Readline Arguments\7f396623
+Node: Searching\7f397716
+Node: Readline Init File\7f399962
+Node: Readline Init File Syntax\7f401268
+Node: Conditional Init Constructs\7f428222
+Node: Sample Init File\7f432610
+Node: Bindable Readline Commands\7f435733
+Node: Commands For Moving\7f437274
+Node: Commands For History\7f439741
+Node: Commands For Text\7f445135
+Node: Commands For Killing\7f449263
+Node: Numeric Arguments\7f452054
+Node: Commands For Completion\7f453209
+Node: Keyboard Macros\7f458908
+Node: Miscellaneous Commands\7f459612
+Node: Readline vi Mode\7f467158
+Node: Programmable Completion\7f468138
+Node: Programmable Completion Builtins\7f477877
+Node: A Programmable Completion Example\7f489617
+Node: Using History Interactively\7f494965
+Node: Bash History Facilities\7f495649
+Node: Bash History Builtins\7f499387
+Node: History Interaction\7f506985
+Node: Event Designators\7f511938
+Node: Word Designators\7f513519
+Node: Modifiers\7f515914
+Node: Installing Bash\7f517854
+Node: Basic Installation\7f518973
+Node: Compilers and Options\7f522852
+Node: Compiling For Multiple Architectures\7f523605
+Node: Installation Names\7f525361
+Node: Specifying the System Type\7f527598
+Node: Sharing Defaults\7f528347
+Node: Operation Controls\7f529064
+Node: Optional Features\7f530086
+Node: Reporting Bugs\7f542812
+Node: Major Differences From The Bourne Shell\7f544172
+Node: GNU Free Documentation License\7f565602
+Node: Indexes\7f590782
+Node: Builtin Index\7f591236
+Node: Reserved Word Index\7f598337
+Node: Variable Index\7f600785
+Node: Function Index\7f618201
+Node: Concept Index\7f632337
\1f
End Tag Table
-This is pdfTeX, Version 3.141592653-2.6-1.40.27 (TeX Live 2025/MacPorts 2025.74524_1) (preloaded format=etex 2025.9.16) 2 FEB 2026 15:27
+This is pdfTeX, Version 3.141592653-2.6-1.40.27 (TeX Live 2025/MacPorts 2025.74524_1) (preloaded format=pdfetex 2025.9.16) 29 APR 2026 10:19
entering extended mode
restricted \write18 enabled.
file:line:error style messages enabled.
%&-line parsing enabled.
-**\nonstopmode \input /usr/local/src/bash/bash-20260130/doc/bashref.texi \input
- /usr/local/src/bash/bash-20260130/doc/bashref.texi
-(/usr/local/src/bash/bash-20260130/doc/bashref.texi
-(/usr/local/src/bash/bash-20260130/doc/texinfo.tex
+**\input /usr/local/src/bash/bash-20260428/doc/bashref.texi \input /usr/local/s
+rc/bash/bash-20260428/doc/bashref.texi
+(/usr/local/src/bash/bash-20260428/doc/bashref.texi
+(/usr/local/src/bash/bash-20260428/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-20260130/doc/version.texi) [1] [2]
-(/usr/local/build/bash/bash-20260130/doc/bashref.toc [-1] [-2] [-3]) [-4]
-Chapter 1
+(/usr/local/src/bash/bash-20260428/doc/version.texi) [1{/opt/local/var/db/texmf
+/fonts/map/pdftex/updmap/pdftex.map}] [2]
+(/usr/local/build/bash/bash-20260428/doc/bashref.toc [-1] [-2] [-3]) [-4]
+(/usr/local/build/bash/bash-20260428/doc/bashref.toc)
+(/usr/local/build/bash/bash-20260428/doc/bashref.toc) Chapter 1
\openout0 = `bashref.toc'.
- (/usr/local/build/bash/bash-20260130/doc/bashref.aux)
+
+(/usr/local/build/bash/bash-20260428/doc/bashref.aux)
\openout1 = `bashref.aux'.
- [1] Chapter 2
-[2]
+ [1] Chapter 2 [2]
@cpindfile=@write2
\openout2 = `bashref.cp'.
- [3] Chapter 3 [4] [5] [6] [7]
+
+[3] Chapter 3 [4] [5] [6] [7]
@vrindfile=@write3
\openout3 = `bashref.vr'.
@rwindfile=@write4
\openout4 = `bashref.rw'.
- [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23]
-[24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38]
-[39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] Chapter 4 [51]
+ [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20{/opt/local/share/texmf-t
+exlive/fonts/enc/dvips/cm-super/cm-super-t1.enc}] [21] [22] [23] [24]
+[25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39]
+[40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] Chapter 4 [51]
@btindfile=@write5
\openout5 = `bashref.bt'.
-
-[52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66]
-[67] [68] [69] [70] [71] [72] [73]
-Overfull \hbox (38.26585pt too wide) in paragraph at lines 5964--5964
+ [52]
+[53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67]
+[68] [69] [70] [71] [72] [73]
+Overfull \hbox (38.26585pt too wide) in paragraph at lines 5981--5981
[]@texttt set [-abefhkmnptuvxBCEHPT] [-o @textttsl option-name@texttt ] [--] [
-] [@textttsl ar-gu-ment []@texttt ][]
.etc.
-Overfull \hbox (38.26585pt too wide) in paragraph at lines 5965--5965
+Overfull \hbox (38.26585pt too wide) in paragraph at lines 5982--5982
[]@texttt set [+abefhkmnptuvxBCEHPT] [+o @textttsl option-name@texttt ] [--] [
-] [@textttsl ar-gu-ment []@texttt ][]
[87] [88] [89] [90] [91] [92] [93] [94] [95] [96] [97] [98] Chapter 6 [99]
[100] [101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111]
[112] [113] [114] [115] [116] [117] [118] [119] [120] [121] [122] [123]
-Chapter 7 [124] [125] [126] [127] [128]
+[124] Chapter 7 [125] [126] [127] [128] [129]
texinfo.tex: doing @include of rluser.texi
-(/usr/local/src/bash/bash-20260130/lib/readline/doc/rluser.texi Chapter 8
-[129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
+(/usr/local/src/bash/bash-20260428/lib/readline/doc/rluser.texi Chapter 8
+[130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140] [141]
Underfull \hbox (badness 7540) in paragraph at lines 969--975
[]@textrm In the ex-am-ple above, @textttsl C-u[] @textrm is bound to the func
-tion
.@texttt v
.etc.
-[141] [142] [143] [144]
+[142] [143] [144] [145]
Overfull \hbox (26.43913pt too wide) in paragraph at lines 1215--1215
[]@texttt Meta-Control-h: backward-kill-word Text after the function name is i
gnored[]
.@texttt t
.etc.
-[145] [146]
+[146] [147]
@fnindfile=@write6
\openout6 = `bashref.fn'.
- [147] [148] [149] [150] [151] [152] [153] [154] [155] [156]
-[157] [158] [159] [160] [161] [162] [163] [164] [165] [166])
+ [148] [149] [150] [151] [152] [153] [154] [155] [156] [157]
+[158] [159] [160] [161] [162] [163] [164] [165] [166] [167])
texinfo.tex: doing @include of hsuser.texi
-(/usr/local/src/bash/bash-20260130/lib/readline/doc/hsuser.texi Chapter 9
-[167] [168] [169] [170] [171] [172] [173]) Chapter 10 [174] [175] [176]
-[177] [178]
-Underfull \hbox (badness 10000) in paragraph at lines 10793--10802
+(/usr/local/src/bash/bash-20260428/lib/readline/doc/hsuser.texi Chapter 9
+[168] [169] [170] [171] [172] [173] [174]) Chapter 10 [175] [176] [177]
+[178] [179]
+Underfull \hbox (badness 10000) in paragraph at lines 10855--10864
[]@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 10793--10802
+Underfull \hbox (badness 10000) in paragraph at lines 10855--10864
@textrm `@texttt disabled-builtins[]@textrm '[], `@texttt direxpand-default[]@t
extrm '[], `@texttt strict-posix-default[]@textrm '[], and
.@texttt a
.etc.
-[179] [180] [181] [182] Appendix A [183] Appendix B [184] [185] [186] [187]
-[188] [189] [190] Appendix C [191]
+[180] [181] [182] [183] Appendix A [184] Appendix B [185] [186] [187] [188]
+[189] [190] [191] Appendix C [192]
texinfo.tex: doing @include of fdl.texi
-(/usr/local/src/bash/bash-20260130/doc/fdl.texi [192] [193] [194] [195]
-[196] [197] [198]) Appendix D [199] [200] [201] [202] [203] [204] [205]
-[206] [207] [208] )
+(/usr/local/src/bash/bash-20260428/doc/fdl.texi [193] [194] [195] [196]
+[197] [198] [199]) Appendix D [200] [201] [202] [203] [204] [205] [206]
+[207] [208] [209] )
Here is how much of TeX's memory you used:
- 3531 strings out of 495830
- 40273 string characters out of 6171293
- 88550 words of memory out of 5000000
- 4884 multiletter control sequences out of 15000+600000
+ 4117 strings out of 495820
+ 47665 string characters out of 6170887
+ 145121 words of memory out of 5000000
+ 5053 multiletter control sequences out of 15000+600000
34315 words of font info for 116 fonts, out of 8000000 for 9000
701 hyphenation exceptions out of 8191
- 16i,6n,16p,402b,942s stack positions out of 10000i,1000n,20000p,200000b,200000s
+ 16i,6n,16p,389b,983s stack positions out of 10000i,1000n,20000p,200000b,200000s
+</opt/local/share/texmf-texlive/fonts/type1/public/amsfonts/
+cm/cmbx12.pfb></opt/local/share/texmf-texlive/fonts/type1/public/amsfonts/cm/cm
+csc10.pfb></opt/local/share/texmf-texlive/fonts/type1/public/amsfonts/cm/cmmi10
+.pfb></opt/local/share/texmf-texlive/fonts/type1/public/amsfonts/cm/cmmi12.pfb>
+</opt/local/share/texmf-texlive/fonts/type1/public/amsfonts/cm/cmmi9.pfb></opt/
+local/share/texmf-texlive/fonts/type1/public/amsfonts/cm/cmr10.pfb></opt/local/
+share/texmf-texlive/fonts/type1/public/amsfonts/cm/cmr9.pfb></opt/local/share/t
+exmf-texlive/fonts/type1/public/amsfonts/cm/cmsl10.pfb></opt/local/share/texmf-
+texlive/fonts/type1/public/amsfonts/cm/cmsltt10.pfb></opt/local/share/texmf-tex
+live/fonts/type1/public/amsfonts/cm/cmsy10.pfb></opt/local/share/texmf-texlive/
+fonts/type1/public/amsfonts/cm/cmti10.pfb></opt/local/share/texmf-texlive/fonts
+/type1/public/amsfonts/cm/cmtt10.pfb></opt/local/share/texmf-texlive/fonts/type
+1/public/amsfonts/cm/cmtt12.pfb></opt/local/share/texmf-texlive/fonts/type1/pub
+lic/amsfonts/cm/cmtt9.pfb></opt/local/share/texmf-texlive/fonts/type1/public/cm
+-super/sfrm1095.pfb></opt/local/share/texmf-texlive/fonts/type1/public/cm-super
+/sfrm1440.pfb>
+Output written on bashref.pdf (215 pages, 814924 bytes).
+PDF statistics:
+ 2954 PDF objects out of 2984 (max. 8388607)
+ 2691 compressed objects within 27 object streams
+ 343 named destinations out of 1000 (max. 500000)
+ 1157 words of extra memory for PDF output out of 10000 (max. 10000000)
-Output written on bashref.dvi (214 pages, 903700 bytes).
\entry{]]}{15}{\code {]]}}
\entry{{\indexlbrace }}{18}{\code {{\tt \char 123}}}
\entry{{\indexrbrace }}{18}{\code {{\tt \char 125}}}
-\entry{function}{19}{\code {function}}
+\entry{function}{20}{\code {function}}
\initial {F}
\entry{\code {fi}}{13}
\entry{\code {for}}{12}
-\entry{\code {function}}{19}
+\entry{\code {function}}{20}
\initial {I}
\entry{\code {if}}{13}
\entry{\code {in}}{13}
and the here-document text is treated similarly to a double-quoted string:
all lines of the here-document are subjected to
parameter expansion, command substitution, and arithmetic expansion,
-the character sequence @code{\newline} is treated literally,
+the character sequence @code{\newline} is treated as a line continuation,
and @samp{\} must be used to quote the characters
@samp{\}, @samp{$}, and @samp{`};
however, double quote characters have no special meaning.
@section Shell Scripts
@cindex shell script
-A shell script is a text file containing shell commands.
+A @dfn{shell script} is a text file containing shell commands.
When such a file is used as the first non-option argument when
invoking Bash, and neither the @option{-c} nor @option{-s} option
is supplied (@pxref{Invoking Bash}),
or one started with the @option{-i} option.
@xref{Interactive Shells}, for more information.
+A @dfn{non-interactive shell} is, not surprisingly, one that does not
+satisfy the tests for interactivity given above.
+A non-interactive shell is usually started to run commands from a script
+file supplied as an argument (@pxref{Shell Scripts})
+or from a string supplied with the
+@option{-c}
+option.
+
If arguments remain after option processing, and neither the
@option{-c} nor the @option{-s}
option has been supplied, the first argument is treated as
@env{PATH}
for the script.
+For example, the following command starts an interactive shell:
+
+@example
+bash
+@end example
+
+@noindent
+whereas this command will read and execute commands from @file{filename}:
+
+@example
+bash filename
+@end example
+
+@noindent
+This command will execute @samp{echo hello}:
+
+@example
+bash -c 'echo hello'
+@end example
+
+@noindent
+and this will execute the same command
+read from the standard input:
+
+@example
+echo echo hello | bash
+@end example
+
@node Bash Startup Files
@section Bash Startup Files
@cindex startup files
This section describes how Bash executes its startup files.
If any of the files exist but cannot be read, Bash reports an error.
-Tildes are expanded in filenames as described above under
+Tildes in filenames are expanded as described above under
Tilde Expansion (@pxref{Tilde Expansion}).
Interactive shells are described in @ref{Interactive Shells}.
In this mode, interactive shells expand the @env{ENV} variable
and read and execute commands from the file whose name is the
expanded value.
-No other startup files are read.
+A posix-mode shell does not attempt to read any other startup files,
+even when invoked as a login shell.
@subsubheading Invoked by remote shell daemon
Bash
attempts to determine when it is being run with its standard input
connected to a network connection, as when executed by
-the historical and rarely-seen remote shell daemon, usually @code{rshd},
-or the secure shell daemon @code{sshd}.
+the secure shell daemon @code{sshd}.
+or the historical and rarely-seen remote shell daemon, usually @code{rshd}.
If
Bash
determines it is being run non-interactively in this fashion,
option makes Bash use a different file instead of
@file{~/.bashrc},
but neither
-@code{rshd} nor @code{sshd} generally invoke the shell with those
+@command{sshd} nor @command{rshd} generally invoke the shell with those
options or allow them to be specified.
@subsubheading Invoked with unequal effective and real @sc{uid/gid}s
variables, if they appear in the environment, are ignored, and the effective
user id is set to the real user id.
If the @option{-p} option is supplied at invocation, the startup behavior is
-the same, but the effective user id is not reset.
+the same, but Bash does not reset the effective user id.
@node Interactive Shells
@section Interactive Shells
@numsubsecentry{What is an Interactive Shell?}{6.3.1}{What is an Interactive Shell?}{104}
@numsubsecentry{Is this Shell Interactive?}{6.3.2}{Is this Shell Interactive?}{104}
@numsubsecentry{Interactive Shell Behavior}{6.3.3}{Interactive Shell Behavior}{104}
-@numsecentry{Bash Conditional Expressions}{6.4}{Bash Conditional Expressions}{105}
-@numsecentry{Shell Arithmetic}{6.5}{Shell Arithmetic}{107}
+@numsecentry{Bash Conditional Expressions}{6.4}{Bash Conditional Expressions}{106}
+@numsecentry{Shell Arithmetic}{6.5}{Shell Arithmetic}{108}
@numsecentry{Aliases}{6.6}{Aliases}{109}
@numsecentry{Arrays}{6.7}{Arrays}{110}
@numsecentry{The Directory Stack}{6.8}{The Directory Stack}{112}
@numsubsecentry{What is POSIX?}{6.11.1}{}{116}
@numsubsecentry{Bash POSIX Mode}{6.11.2}{}{117}
@numsecentry{Shell Compatibility Mode}{6.12}{Shell Compatibility Mode}{122}
-@numchapentry{Job Control}{7}{Job Control}{125}
-@numsecentry{Job Control Basics}{7.1}{Job Control Basics}{125}
-@numsecentry{Job Control Builtins}{7.2}{Job Control Builtins}{126}
-@numsecentry{Job Control Variables}{7.3}{Job Control Variables}{129}
-@numchapentry{Command Line Editing}{8}{Command Line Editing}{130}
-@numsecentry{Introduction to Line Editing}{8.1}{Introduction and Notation}{130}
-@numsecentry{Readline Interaction}{8.2}{Readline Interaction}{130}
-@numsubsecentry{Readline Bare Essentials}{8.2.1}{Readline Bare Essentials}{131}
-@numsubsecentry{Readline Movement Commands}{8.2.2}{Readline Movement Commands}{131}
-@numsubsecentry{Readline Killing Commands}{8.2.3}{Readline Killing Commands}{132}
-@numsubsecentry{Readline Arguments}{8.2.4}{Readline Arguments}{132}
-@numsubsecentry{Searching for Commands in the History}{8.2.5}{Searching}{133}
-@numsecentry{Readline Init File}{8.3}{Readline Init File}{133}
-@numsubsecentry{Readline Init File Syntax}{8.3.1}{Readline Init File Syntax}{133}
-@numsubsecentry{Conditional Init Constructs}{8.3.2}{Conditional Init Constructs}{143}
-@numsubsecentry{Sample Init File}{8.3.3}{Sample Init File}{144}
-@numsecentry{Bindable Readline Commands}{8.4}{Bindable Readline Commands}{147}
-@numsubsecentry{Commands For Moving}{8.4.1}{Commands For Moving}{147}
-@numsubsecentry{Commands For Manipulating The History}{8.4.2}{Commands For History}{148}
-@numsubsecentry{Commands For Changing Text}{8.4.3}{Commands For Text}{150}
-@numsubsecentry{Killing And Yanking}{8.4.4}{Commands For Killing}{151}
-@numsubsecentry{Specifying Numeric Arguments}{8.4.5}{Numeric Arguments}{153}
-@numsubsecentry{Letting Readline Type For You}{8.4.6}{Commands For Completion}{153}
-@numsubsecentry{Keyboard Macros}{8.4.7}{Keyboard Macros}{155}
-@numsubsecentry{Some Miscellaneous Commands}{8.4.8}{Miscellaneous Commands}{155}
-@numsecentry{Readline vi Mode}{8.5}{Readline vi Mode}{158}
-@numsecentry{Programmable Completion}{8.6}{Programmable Completion}{158}
-@numsecentry{Programmable Completion Builtins}{8.7}{Programmable Completion Builtins}{161}
-@numsecentry{A Programmable Completion Example}{8.8}{A Programmable Completion Example}{165}
-@numchapentry{Using History Interactively}{9}{Using History Interactively}{168}
-@numsecentry{Bash History Facilities}{9.1}{Bash History Facilities}{168}
-@numsecentry{Bash History Builtins}{9.2}{Bash History Builtins}{169}
-@numsecentry{History Expansion}{9.3}{History Interaction}{171}
-@numsubsecentry{Event Designators}{9.3.1}{Event Designators}{172}
-@numsubsecentry{Word Designators}{9.3.2}{Word Designators}{173}
-@numsubsecentry{Modifiers}{9.3.3}{Modifiers}{174}
-@numchapentry{Installing Bash}{10}{Installing Bash}{175}
-@numsecentry{Basic Installation}{10.1}{Basic Installation}{175}
-@numsecentry{Compilers and Options}{10.2}{Compilers and Options}{176}
-@numsecentry{Compiling For Multiple Architectures}{10.3}{Compiling For Multiple Architectures}{176}
-@numsecentry{Installation Names}{10.4}{Installation Names}{177}
-@numsecentry{Specifying the System Type}{10.5}{Specifying the System Type}{177}
-@numsecentry{Sharing Defaults}{10.6}{Sharing Defaults}{177}
-@numsecentry{Operation Controls}{10.7}{Operation Controls}{178}
-@numsecentry{Optional Features}{10.8}{Optional Features}{178}
-@appentry{Reporting Bugs}{A}{Reporting Bugs}{184}
-@appentry{Major Differences From The Bourne Shell}{B}{Major Differences From The Bourne Shell}{185}
-@appsecentry{Implementation Differences From The SVR4.2 Shell}{B.1}{}{190}
-@appentry{GNU Free Documentation License}{C}{GNU Free Documentation License}{192}
-@appentry{Indexes}{D}{Indexes}{200}
-@appsecentry{Index of Shell Builtin Commands}{D.1}{Builtin Index}{200}
-@appsecentry{Index of Shell Reserved Words}{D.2}{Reserved Word Index}{201}
-@appsecentry{Parameter and Variable Index}{D.3}{Variable Index}{202}
-@appsecentry{Function Index}{D.4}{Function Index}{204}
-@appsecentry{Concept Index}{D.5}{Concept Index}{206}
+@numchapentry{Job Control}{7}{Job Control}{126}
+@numsecentry{Job Control Basics}{7.1}{Job Control Basics}{126}
+@numsecentry{Job Control Builtins}{7.2}{Job Control Builtins}{127}
+@numsecentry{Job Control Variables}{7.3}{Job Control Variables}{130}
+@numchapentry{Command Line Editing}{8}{Command Line Editing}{131}
+@numsecentry{Introduction to Line Editing}{8.1}{Introduction and Notation}{131}
+@numsecentry{Readline Interaction}{8.2}{Readline Interaction}{131}
+@numsubsecentry{Readline Bare Essentials}{8.2.1}{Readline Bare Essentials}{132}
+@numsubsecentry{Readline Movement Commands}{8.2.2}{Readline Movement Commands}{132}
+@numsubsecentry{Readline Killing Commands}{8.2.3}{Readline Killing Commands}{133}
+@numsubsecentry{Readline Arguments}{8.2.4}{Readline Arguments}{133}
+@numsubsecentry{Searching for Commands in the History}{8.2.5}{Searching}{134}
+@numsecentry{Readline Init File}{8.3}{Readline Init File}{134}
+@numsubsecentry{Readline Init File Syntax}{8.3.1}{Readline Init File Syntax}{134}
+@numsubsecentry{Conditional Init Constructs}{8.3.2}{Conditional Init Constructs}{144}
+@numsubsecentry{Sample Init File}{8.3.3}{Sample Init File}{145}
+@numsecentry{Bindable Readline Commands}{8.4}{Bindable Readline Commands}{148}
+@numsubsecentry{Commands For Moving}{8.4.1}{Commands For Moving}{148}
+@numsubsecentry{Commands For Manipulating The History}{8.4.2}{Commands For History}{149}
+@numsubsecentry{Commands For Changing Text}{8.4.3}{Commands For Text}{151}
+@numsubsecentry{Killing And Yanking}{8.4.4}{Commands For Killing}{152}
+@numsubsecentry{Specifying Numeric Arguments}{8.4.5}{Numeric Arguments}{154}
+@numsubsecentry{Letting Readline Type For You}{8.4.6}{Commands For Completion}{154}
+@numsubsecentry{Keyboard Macros}{8.4.7}{Keyboard Macros}{156}
+@numsubsecentry{Some Miscellaneous Commands}{8.4.8}{Miscellaneous Commands}{156}
+@numsecentry{Readline vi Mode}{8.5}{Readline vi Mode}{159}
+@numsecentry{Programmable Completion}{8.6}{Programmable Completion}{159}
+@numsecentry{Programmable Completion Builtins}{8.7}{Programmable Completion Builtins}{162}
+@numsecentry{A Programmable Completion Example}{8.8}{A Programmable Completion Example}{166}
+@numchapentry{Using History Interactively}{9}{Using History Interactively}{169}
+@numsecentry{Bash History Facilities}{9.1}{Bash History Facilities}{169}
+@numsecentry{Bash History Builtins}{9.2}{Bash History Builtins}{170}
+@numsecentry{History Expansion}{9.3}{History Interaction}{172}
+@numsubsecentry{Event Designators}{9.3.1}{Event Designators}{173}
+@numsubsecentry{Word Designators}{9.3.2}{Word Designators}{174}
+@numsubsecentry{Modifiers}{9.3.3}{Modifiers}{175}
+@numchapentry{Installing Bash}{10}{Installing Bash}{176}
+@numsecentry{Basic Installation}{10.1}{Basic Installation}{176}
+@numsecentry{Compilers and Options}{10.2}{Compilers and Options}{177}
+@numsecentry{Compiling For Multiple Architectures}{10.3}{Compiling For Multiple Architectures}{177}
+@numsecentry{Installation Names}{10.4}{Installation Names}{178}
+@numsecentry{Specifying the System Type}{10.5}{Specifying the System Type}{178}
+@numsecentry{Sharing Defaults}{10.6}{Sharing Defaults}{178}
+@numsecentry{Operation Controls}{10.7}{Operation Controls}{179}
+@numsecentry{Optional Features}{10.8}{Optional Features}{179}
+@appentry{Reporting Bugs}{A}{Reporting Bugs}{185}
+@appentry{Major Differences From The Bourne Shell}{B}{Major Differences From The Bourne Shell}{186}
+@appsecentry{Implementation Differences From The SVR4.2 Shell}{B.1}{}{191}
+@appentry{GNU Free Documentation License}{C}{GNU Free Documentation License}{193}
+@appentry{Indexes}{D}{Indexes}{201}
+@appsecentry{Index of Shell Builtin Commands}{D.1}{Builtin Index}{201}
+@appsecentry{Index of Shell Reserved Words}{D.2}{Reserved Word Index}{202}
+@appsecentry{Parameter and Variable Index}{D.3}{Variable Index}{203}
+@appsecentry{Function Index}{D.4}{Function Index}{205}
+@appsecentry{Concept Index}{D.5}{Concept Index}{207}
\entry{TMOUT}{99}{\code {TMOUT}}
\entry{TMPDIR}{99}{\code {TMPDIR}}
\entry{UID}{99}{\code {UID}}
-\entry{auto_resume}{129}{\code {auto_resume}}
-\entry{active-region-start-color}{134}{\code {active-region-start-color}}
-\entry{active-region-end-color}{134}{\code {active-region-end-color}}
-\entry{bell-style}{134}{\code {bell-style}}
-\entry{bind-tty-special-chars}{135}{\code {bind-tty-special-chars}}
-\entry{blink-matching-paren}{135}{\code {blink-matching-paren}}
-\entry{colored-completion-prefix}{135}{\code {colored-completion-prefix}}
-\entry{colored-stats}{135}{\code {colored-stats}}
-\entry{comment-begin}{135}{\code {comment-begin}}
-\entry{completion-display-width}{135}{\code {completion-display-width}}
-\entry{completion-ignore-case}{135}{\code {completion-ignore-case}}
-\entry{completion-map-case}{135}{\code {completion-map-case}}
-\entry{completion-prefix-display-length}{135}{\code {completion-prefix-display-length}}
-\entry{completion-query-items}{136}{\code {completion-query-items}}
-\entry{convert-meta}{136}{\code {convert-meta}}
-\entry{disable-completion}{136}{\code {disable-completion}}
-\entry{echo-control-characters}{136}{\code {echo-control-characters}}
-\entry{editing-mode}{136}{\code {editing-mode}}
-\entry{emacs-mode-string}{136}{\code {emacs-mode-string}}
-\entry{enable-active-region The}{137}{\code {enable-active-region The}}
-\entry{enable-bracketed-paste}{137}{\code {enable-bracketed-paste}}
-\entry{enable-keypad}{137}{\code {enable-keypad}}
-\entry{enable-meta-key}{137}{\code {enable-meta-key}}
-\entry{expand-tilde}{137}{\code {expand-tilde}}
-\entry{force-meta-prefix}{137}{\code {force-meta-prefix}}
-\entry{history-preserve-point}{138}{\code {history-preserve-point}}
-\entry{history-size}{138}{\code {history-size}}
-\entry{horizontal-scroll-mode}{138}{\code {horizontal-scroll-mode}}
-\entry{input-meta}{138}{\code {input-meta}}
-\entry{meta-flag}{138}{\code {meta-flag}}
-\entry{isearch-terminators}{138}{\code {isearch-terminators}}
-\entry{keymap}{138}{\code {keymap}}
-\entry{mark-modified-lines}{139}{\code {mark-modified-lines}}
-\entry{mark-symlinked-directories}{139}{\code {mark-symlinked-directories}}
-\entry{match-hidden-files}{139}{\code {match-hidden-files}}
-\entry{menu-complete-display-prefix}{139}{\code {menu-complete-display-prefix}}
-\entry{output-meta}{139}{\code {output-meta}}
-\entry{page-completions}{139}{\code {page-completions}}
-\entry{revert-all-at-newline}{140}{\code {revert-all-at-newline}}
-\entry{search-ignore-case}{140}{\code {search-ignore-case}}
-\entry{show-all-if-ambiguous}{140}{\code {show-all-if-ambiguous}}
-\entry{show-all-if-unmodified}{140}{\code {show-all-if-unmodified}}
-\entry{show-mode-in-prompt}{140}{\code {show-mode-in-prompt}}
-\entry{skip-completed-text}{140}{\code {skip-completed-text}}
-\entry{vi-cmd-mode-string}{140}{\code {vi-cmd-mode-string}}
-\entry{vi-ins-mode-string}{141}{\code {vi-ins-mode-string}}
-\entry{visible-stats}{141}{\code {visible-stats}}
+\entry{auto_resume}{130}{\code {auto_resume}}
+\entry{active-region-start-color}{135}{\code {active-region-start-color}}
+\entry{active-region-end-color}{135}{\code {active-region-end-color}}
+\entry{bell-style}{135}{\code {bell-style}}
+\entry{bind-tty-special-chars}{136}{\code {bind-tty-special-chars}}
+\entry{blink-matching-paren}{136}{\code {blink-matching-paren}}
+\entry{colored-completion-prefix}{136}{\code {colored-completion-prefix}}
+\entry{colored-stats}{136}{\code {colored-stats}}
+\entry{comment-begin}{136}{\code {comment-begin}}
+\entry{completion-display-width}{136}{\code {completion-display-width}}
+\entry{completion-ignore-case}{136}{\code {completion-ignore-case}}
+\entry{completion-map-case}{136}{\code {completion-map-case}}
+\entry{completion-prefix-display-length}{136}{\code {completion-prefix-display-length}}
+\entry{completion-query-items}{137}{\code {completion-query-items}}
+\entry{convert-meta}{137}{\code {convert-meta}}
+\entry{disable-completion}{137}{\code {disable-completion}}
+\entry{echo-control-characters}{137}{\code {echo-control-characters}}
+\entry{editing-mode}{137}{\code {editing-mode}}
+\entry{emacs-mode-string}{137}{\code {emacs-mode-string}}
+\entry{enable-active-region The}{138}{\code {enable-active-region The}}
+\entry{enable-bracketed-paste}{138}{\code {enable-bracketed-paste}}
+\entry{enable-keypad}{138}{\code {enable-keypad}}
+\entry{enable-meta-key}{138}{\code {enable-meta-key}}
+\entry{expand-tilde}{138}{\code {expand-tilde}}
+\entry{force-meta-prefix}{138}{\code {force-meta-prefix}}
+\entry{history-preserve-point}{139}{\code {history-preserve-point}}
+\entry{history-size}{139}{\code {history-size}}
+\entry{horizontal-scroll-mode}{139}{\code {horizontal-scroll-mode}}
+\entry{input-meta}{139}{\code {input-meta}}
+\entry{meta-flag}{139}{\code {meta-flag}}
+\entry{isearch-terminators}{139}{\code {isearch-terminators}}
+\entry{keymap}{139}{\code {keymap}}
+\entry{mark-modified-lines}{140}{\code {mark-modified-lines}}
+\entry{mark-symlinked-directories}{140}{\code {mark-symlinked-directories}}
+\entry{match-hidden-files}{140}{\code {match-hidden-files}}
+\entry{menu-complete-display-prefix}{140}{\code {menu-complete-display-prefix}}
+\entry{output-meta}{140}{\code {output-meta}}
+\entry{page-completions}{140}{\code {page-completions}}
+\entry{revert-all-at-newline}{141}{\code {revert-all-at-newline}}
+\entry{search-ignore-case}{141}{\code {search-ignore-case}}
+\entry{show-all-if-ambiguous}{141}{\code {show-all-if-ambiguous}}
+\entry{show-all-if-unmodified}{141}{\code {show-all-if-unmodified}}
+\entry{show-mode-in-prompt}{141}{\code {show-mode-in-prompt}}
+\entry{skip-completed-text}{141}{\code {skip-completed-text}}
+\entry{vi-cmd-mode-string}{141}{\code {vi-cmd-mode-string}}
+\entry{vi-ins-mode-string}{142}{\code {vi-ins-mode-string}}
+\entry{visible-stats}{142}{\code {visible-stats}}
\initial {0}
\entry{\code {0}}{24}
\initial {A}
-\entry{\code {active-region-end-color}}{134}
-\entry{\code {active-region-start-color}}{134}
-\entry{\code {auto_resume}}{129}
+\entry{\code {active-region-end-color}}{135}
+\entry{\code {active-region-start-color}}{135}
+\entry{\code {auto_resume}}{130}
\initial {B}
\entry{\code {BASH}}{87}
\entry{\code {BASH_ALIASES}}{87}
\entry{\code {BASH_XTRACEFD}}{90}
\entry{\code {BASHOPTS}}{87}
\entry{\code {BASHPID}}{87}
-\entry{\code {bell-style}}{134}
-\entry{\code {bind-tty-special-chars}}{135}
-\entry{\code {blink-matching-paren}}{135}
+\entry{\code {bell-style}}{135}
+\entry{\code {bind-tty-special-chars}}{136}
+\entry{\code {blink-matching-paren}}{136}
\initial {C}
\entry{\code {CDPATH}}{86}
\entry{\code {CHILD_MAX}}{90}
-\entry{\code {colored-completion-prefix}}{135}
-\entry{\code {colored-stats}}{135}
+\entry{\code {colored-completion-prefix}}{136}
+\entry{\code {colored-stats}}{136}
\entry{\code {COLUMNS}}{90}
-\entry{\code {comment-begin}}{135}
+\entry{\code {comment-begin}}{136}
\entry{\code {COMP_CWORD}}{90}
\entry{\code {COMP_KEY}}{90}
\entry{\code {COMP_LINE}}{91}
\entry{\code {COMP_TYPE}}{91}
\entry{\code {COMP_WORDBREAKS}}{91}
\entry{\code {COMP_WORDS}}{91}
-\entry{\code {completion-display-width}}{135}
-\entry{\code {completion-ignore-case}}{135}
-\entry{\code {completion-map-case}}{135}
-\entry{\code {completion-prefix-display-length}}{135}
-\entry{\code {completion-query-items}}{136}
+\entry{\code {completion-display-width}}{136}
+\entry{\code {completion-ignore-case}}{136}
+\entry{\code {completion-map-case}}{136}
+\entry{\code {completion-prefix-display-length}}{136}
+\entry{\code {completion-query-items}}{137}
\entry{\code {COMPREPLY}}{91}
-\entry{\code {convert-meta}}{136}
+\entry{\code {convert-meta}}{137}
\entry{\code {COPROC}}{91}
\initial {D}
\entry{\code {DIRSTACK}}{91}
-\entry{\code {disable-completion}}{136}
+\entry{\code {disable-completion}}{137}
\initial {E}
-\entry{\code {echo-control-characters}}{136}
-\entry{\code {editing-mode}}{136}
-\entry{\code {emacs-mode-string}}{136}
+\entry{\code {echo-control-characters}}{137}
+\entry{\code {editing-mode}}{137}
+\entry{\code {emacs-mode-string}}{137}
\entry{\code {EMACS}}{92}
-\entry{\code {enable-active-region The}}{137}
-\entry{\code {enable-bracketed-paste}}{137}
-\entry{\code {enable-keypad}}{137}
-\entry{\code {enable-meta-key}}{137}
+\entry{\code {enable-active-region The}}{138}
+\entry{\code {enable-bracketed-paste}}{138}
+\entry{\code {enable-keypad}}{138}
+\entry{\code {enable-meta-key}}{138}
\entry{\code {ENV}}{92}
\entry{\code {EPOCHREALTIME}}{92}
\entry{\code {EPOCHSECONDS}}{92}
\entry{\code {EUID}}{92}
\entry{\code {EXECIGNORE}}{92}
-\entry{\code {expand-tilde}}{137}
+\entry{\code {expand-tilde}}{138}
\initial {F}
\entry{\code {FCEDIT}}{92}
\entry{\code {FIGNORE}}{92}
-\entry{\code {force-meta-prefix}}{137}
+\entry{\code {force-meta-prefix}}{138}
\entry{\code {FUNCNAME}}{92}
\entry{\code {FUNCNEST}}{93}
\initial {G}
\entry{\code {HISTFILE}}{94}
\entry{\code {HISTFILESIZE}}{94}
\entry{\code {HISTIGNORE}}{94}
-\entry{\code {history-preserve-point}}{138}
-\entry{\code {history-size}}{138}
+\entry{\code {history-preserve-point}}{139}
+\entry{\code {history-size}}{139}
\entry{\code {HISTSIZE}}{95}
\entry{\code {HISTTIMEFORMAT}}{95}
\entry{\code {HOME}}{86}
-\entry{\code {horizontal-scroll-mode}}{138}
+\entry{\code {horizontal-scroll-mode}}{139}
\entry{\code {HOSTFILE}}{95}
\entry{\code {HOSTNAME}}{95}
\entry{\code {HOSTTYPE}}{95}
\initial {I}
\entry{\code {IFS}}{86}
\entry{\code {IGNOREEOF}}{95}
-\entry{\code {input-meta}}{138}
+\entry{\code {input-meta}}{139}
\entry{\code {INPUTRC}}{95}
\entry{\code {INSIDE_EMACS}}{95}
-\entry{\code {isearch-terminators}}{138}
+\entry{\code {isearch-terminators}}{139}
\initial {K}
-\entry{\code {keymap}}{138}
+\entry{\code {keymap}}{139}
\initial {L}
\entry{\code {LANG}}{8, 96}
\entry{\code {LC_ALL}}{96}
\entry{\code {MAILCHECK}}{96}
\entry{\code {MAILPATH}}{86}
\entry{\code {MAPFILE}}{96}
-\entry{\code {mark-modified-lines}}{139}
-\entry{\code {mark-symlinked-directories}}{139}
-\entry{\code {match-hidden-files}}{139}
-\entry{\code {menu-complete-display-prefix}}{139}
-\entry{\code {meta-flag}}{138}
+\entry{\code {mark-modified-lines}}{140}
+\entry{\code {mark-symlinked-directories}}{140}
+\entry{\code {match-hidden-files}}{140}
+\entry{\code {menu-complete-display-prefix}}{140}
+\entry{\code {meta-flag}}{139}
\initial {O}
\entry{\code {OLDPWD}}{96}
\entry{\code {OPTARG}}{86}
\entry{\code {OPTERR}}{96}
\entry{\code {OPTIND}}{86}
\entry{\code {OSTYPE}}{96}
-\entry{\code {output-meta}}{139}
+\entry{\code {output-meta}}{140}
\initial {P}
-\entry{\code {page-completions}}{139}
+\entry{\code {page-completions}}{140}
\entry{\code {PATH}}{86}
\entry{\code {PIPESTATUS}}{97}
\entry{\code {POSIXLY_CORRECT}}{97}
\entry{\code {READLINE_MARK}}{98}
\entry{\code {READLINE_POINT}}{98}
\entry{\code {REPLY}}{98}
-\entry{\code {revert-all-at-newline}}{140}
+\entry{\code {revert-all-at-newline}}{141}
\initial {S}
-\entry{\code {search-ignore-case}}{140}
+\entry{\code {search-ignore-case}}{141}
\entry{\code {SECONDS}}{98}
\entry{\code {SHELL}}{98}
\entry{\code {SHELLOPTS}}{98}
\entry{\code {SHLVL}}{98}
-\entry{\code {show-all-if-ambiguous}}{140}
-\entry{\code {show-all-if-unmodified}}{140}
-\entry{\code {show-mode-in-prompt}}{140}
-\entry{\code {skip-completed-text}}{140}
+\entry{\code {show-all-if-ambiguous}}{141}
+\entry{\code {show-all-if-unmodified}}{141}
+\entry{\code {show-mode-in-prompt}}{141}
+\entry{\code {skip-completed-text}}{141}
\entry{\code {SRANDOM}}{98}
\initial {T}
\entry{\code {TEXTDOMAIN}}{8}
\initial {U}
\entry{\code {UID}}{99}
\initial {V}
-\entry{\code {vi-cmd-mode-string}}{140}
-\entry{\code {vi-ins-mode-string}}{141}
-\entry{\code {visible-stats}}{141}
+\entry{\code {vi-cmd-mode-string}}{141}
+\entry{\code {vi-ins-mode-string}}{142}
+\entry{\code {visible-stats}}{142}
Copyright (C) 1988-2026 Free Software Foundation, Inc.
@end ignore
-@set LASTCHANGE Mon Mar 16 15:38:02 EDT 2026
+@set LASTCHANGE Wed May 6 16:08:14 EDT 2026
@set EDITION 5.3
@set VERSION 5.3
-@set UPDATED 16 March 2026
-@set UPDATED-MONTH March 2026
+@set UPDATED 6 May 2026
+@set UPDATED-MONTH May 2026
*/
/* Headers */
+#include <config.h>
#include <errno.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+
#include "shmbutil.h"
#include "loadables.h"
#include <array.h> /* Has to go after stdint & loadables (!) */
if ((*p-- & mask[1]) != mask[0])
goto not_utf_8;
+ num_bytes_left--;
n = 2;
for (i = num_bytes_left >= 3 ? 3 : num_bytes_left; i > 0; i--, p--, n++)
{ /* 3 more bytes max */
* with NULL value and putting an allocated buffer in it.
*/
bind_array_element (v, (*ind)++, (char *)NULL, 0);
- buf = xmalloc(len + 1); /* +1 for NUL */
+ buf = xmalloc(len + outputsep + 1); /* +1 for NUL */
(((ARRAY *)v->value)->lastref)->value = buf;
- buf[len] = '\0';
+ buf[len + outputsep] = '\0';
} /* if (v) */
#endif
int rval;
char sep;
int opt;
- int fd;
+ int fd, closefd;
v = 0;
rval = EXECUTION_SUCCESS;
ind = 0;
reset_internal_getopt();
- while ((opt = internal_getopt(list, "0:a:h")) != -1)
+ while ((opt = internal_getopt(list, "0a:h")) != -1)
switch (opt)
{
case '0':
do
{
/* for each file */
+ closefd = 0;
if (l == 0)
fd = 0;
else
- SYSCALL(fd, open(l->word->word, O_RDONLY));
+ {
+ SYSCALL(fd, open(l->word->word, O_RDONLY));
+ closefd = fd != -1;;
+ }
if (fd == -1)
{
file_error(l->word->word);
}
reverse_line(v, &ind, line, n, outputsep, sep);
} /* while ((n = zgetline(...) !=-1) */
- if (fd != 0)
+ if (closefd)
close(fd);
next_file:
/* command and arithmetic substitution, parameter and variable expansion,
word splitting, pathname expansion, and quote removal. */
list = releaser = expand_words_no_vars (select_command->map_list);
- list_len = list_length ((GENERIC_LIST *)list);
+ list_len = wlist_length (list);
if (list == 0 || list_len == 0)
{
if (list)
/* Declarations for functions defined in list.c. */
extern void list_walk (GENERIC_LIST *, sh_glist_func_t *);
extern void wlist_walk (WORD_LIST *, sh_icpfunc_t *);
-extern GENERIC_LIST *list_reverse (GENERIC_LIST *);
+extern void *list_reverse (void *);
extern int list_length (GENERIC_LIST *);
+extern int wlist_length (WORD_LIST *);
extern GENERIC_LIST *list_append (GENERIC_LIST *, GENERIC_LIST *);
-extern GENERIC_LIST *list_emove (GENERIC_LIST **, sh_gcp_func_t *, char *); /* unused */
+extern WORD_LIST *wlist_append (WORD_LIST *, WORD_LIST *);
+extern GENERIC_LIST *list_remove (GENERIC_LIST **, sh_gcp_func_t *, char *); /* unused */
/* Declarations for functions defined in stringlib.c */
extern int find_string_in_alist (char *, STRING_INT_ALIST *, int);
/* A macro to avoid making an unnecessary function call. */
#define REVERSE_LIST(list, type) \
- ((list && list->next) ? (type)list_reverse ((GENERIC_LIST *)list) \
+ ((list && list->next) ? (type)list_reverse ((void *)list) \
: (type)(list))
#if __GNUC__ > 1
/* stringlist.c - functions to handle a generic `list of strings' structure */
-/* Copyright (C) 2000-2019, 2022-2023 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2019, 2022-2026 Free Software Foundation, Inc.
This file is part of GNU Bash, the Bourne Again SHell.
*ip = 0;
return ((STRINGLIST *)0);
}
- slen = list_length ((GENERIC_LIST *)list);
+ slen = wlist_length (list);
ret = (STRINGLIST *)xmalloc (sizeof (STRINGLIST));
ret->list = strvec_from_word_list (list, alloc, starting_index, &len);
ret->list_size = slen + starting_index;
/* stringvec.c - functions for managing arrays of strings. */
-/* Copyright (C) 2000-2002,2022-2024 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2002,2022-2026 Free Software Foundation, Inc.
This file is part of GNU Bash, the Bourne Again SHell.
size_t count;
char **array;
- count = list_length ((GENERIC_LIST *)list);
+ count = wlist_length (list);
array = (char **)xmalloc ((1 + count + starting_index) * sizeof (char *));
for (count = 0; count < starting_index; count++)
/* list.c - Functions for manipulating linked lists of objects. */
-/* Copyright (C) 1996-2009,2022 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2026 Free Software Foundation, Inc.
This file is part of GNU Bash, the Bourne Again SHell.
/* Reverse the chain of structures in LIST. Output the new head
of the chain. You should always assign the output value of this
function to something, or you will lose the chain. */
-GENERIC_LIST *
-list_reverse (GENERIC_LIST *list)
+void *
+list_reverse (void *head)
{
- register GENERIC_LIST *next, *prev;
-
- for (prev = (GENERIC_LIST *)NULL; list; )
+ void *next, *prev, *list;
+
+ prev = NULL;
+ next = NULL;
+ list = head;
+
+ /* We rely on the fact that the C standard guarantees that structures are
+ not padded: the first member of the struct has the same address as the
+ struct itself. So *(void **)X is effectively X->next as long as next is
+ the first member of struct X. We'll see if this gets past gcc's strict
+ aliasing rules. */
+ while (list != NULL)
{
- next = list->next;
- list->next = prev;
+ next = *(void **)list; /* effectively list->next */
+ *(void **)list = prev; /* effectively set list->next */
+
prev = list;
list = next;
}
+
return (prev);
}
+#ifdef INCLUDE_UNUSED
/* Return the number of elements in LIST, a generic list. */
int
list_length (GENERIC_LIST *list)
{
- register int i;
+ int i;
+
+ for (i = 0; list; list = list->next, i++);
+ return (i);
+}
+#endif
+
+int
+wlist_length (WORD_LIST *list)
+{
+ int i;
for (i = 0; list; list = list->next, i++);
return (i);
}
+#if defined (INCLUDE_UNUSED)
/* Append TAIL to HEAD. Return the header of the list. */
GENERIC_LIST *
list_append (GENERIC_LIST *head, GENERIC_LIST *tail)
t_head->next = tail;
return (head);
}
+#endif
+
+WORD_LIST *
+wlist_append (WORD_LIST *head, WORD_LIST *tail)
+{
+ register WORD_LIST *t_head;
+
+ if (head == 0)
+ return (tail);
+
+ for (t_head = head; t_head->next; t_head = t_head->next)
+ ;
+ t_head->next = tail;
+ return (head);
+}
#ifdef INCLUDE_UNUSED
/* Delete the element of LIST which satisfies the predicate function COMPARER.
/* pcomplete.c - functions to generate lists of matches for programmable completion. */
-/* Copyright (C) 1999-2024 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2026 Free Software Foundation, Inc.
This file is part of GNU Bash, the Bourne Again SHell.
l2 = expand_words_shellexp (l);
dispose_words (l);
- nw = list_length ((GENERIC_LIST *)l2);
+ nw = wlist_length (l2);
sl = strlist_create (nw + 1);
ntxt = bash_dequote_text (text);
if (glob_list)
{
- output_list = (WORD_LIST *)list_append ((GENERIC_LIST *)glob_list, (GENERIC_LIST *)output_list);
+ output_list = wlist_append (glob_list, output_list);
PREPEND_LIST (tlist, disposables);
}
else if (fail_glob_expansion != 0)
}
expanded = REVERSE_LIST (temp_list, WORD_LIST *);
- new_list = (WORD_LIST *)list_append ((GENERIC_LIST *)expanded, (GENERIC_LIST *)new_list);
+ new_list = wlist_append (expanded, new_list);
}
if (orig_list)