addition to POSIX mode documentation; new translations; update copyrights on some files; update formatted documentation; changes to cut/lcut loadable builtins when supplied -a ARRAY

This commit is contained in:
Chet Ramey
2025-06-06 12:16:11 -04:00
parent dbe4256d5e
commit 727b8d3663
56 changed files with 6737 additions and 11126 deletions
+1
View File
@@ -792,6 +792,7 @@ examples/loadables/csv.c f
examples/loadables/dsv.c f
examples/loadables/kv.c f
examples/loadables/cut.c f
examples/loadables/ocut.c f
examples/loadables/logname.c f
examples/loadables/basename.c f
examples/loadables/dirname.c f
+13 -4
View File
@@ -362,14 +362,23 @@ The following list is what's changed when POSIX mode is in effect:
75. Bash removes an exited background process's status from the list
of such statuses after the wait builtin returns it.
There is other POSIX behavior that Bash does not implement by default
even when in POSIX mode. Specifically:
There is additional POSIX behavior that Bash does not implement by
default even when in POSIX mode. Specifically:
1. The fc builtin checks $EDITOR as a program to edit history
1. POSIX requires that word splitting be byte-oriented. That is, each
_byte_ in the value of IFS potentially splits a word, even if
that byte is part of a multibyte character in IFS or part of
multibyte character in the word. Bash allows multibyte characters
in the value of IFS, treating a valid multibyte character as a
single delimiter, and will not split a valid multibyte character
even if one of the bytes composing that character appears in IFS.
This is POSIX interpretation 1560, further modified by issue 1924.
2. The fc builtin checks $EDITOR as a program to edit history
entries if FCEDIT is unset, rather than defaulting directly to
ed. fc uses ed if EDITOR is unset.
2. As noted above, Bash requires the xpg_echo option to be enabled
3. As noted above, Bash requires the xpg_echo option to be enabled
for the echo builtin to be fully conformant.
Bash can be configured to be POSIX-conformant by default, by specifying
+150 -142
View File
@@ -1,9 +1,9 @@
This is bash.info, produced by makeinfo version 7.1 from bashref.texi.
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, 7 April 2025).
Bash shell (version 5.3, 18 May 2025).
This is Edition 5.3, last updated 7 April 2025, of The GNU Bash
This is Edition 5.3, last updated 18 May 2025, of The GNU Bash
Reference Manual, for Bash, Version 5.3.
Copyright © 1988-2025 Free Software Foundation, Inc.
@@ -26,10 +26,10 @@ Bash Features
*************
This text is a brief description of the features that are present in the
Bash shell (version 5.3, 7 April 2025). The Bash home page is
Bash shell (version 5.3, 18 May 2025). The Bash home page is
<http://www.gnu.org/software/bash/>.
This is Edition 5.3, last updated 7 April 2025, of The GNU Bash
This is Edition 5.3, last updated 18 May 2025, of The GNU Bash
Reference Manual, for Bash, Version 5.3.
Bash contains features that appear in other popular shells, and some
@@ -7990,14 +7990,23 @@ startup files.
75. Bash removes an exited background process's status from the list
of such statuses after the wait builtin returns it.
There is other POSIX behavior that Bash does not implement by default
even when in POSIX mode. Specifically:
There is additional POSIX behavior that Bash does not implement by
default even when in POSIX mode. Specifically:
1. The fc builtin checks $EDITOR as a program to edit history
1. POSIX requires that word splitting be byte-oriented. That is, each
_byte_ in the value of IFS potentially splits a word, even if
that byte is part of a multibyte character in IFS or part of
multibyte character in the word. Bash allows multibyte characters
in the value of IFS, treating a valid multibyte character as a
single delimiter, and will not split a valid multibyte character
even if one of the bytes composing that character appears in IFS.
This is POSIX interpretation 1560, further modified by issue 1924.
2. The fc builtin checks $EDITOR as a program to edit history
entries if FCEDIT is unset, rather than defaulting directly to
ed. fc uses ed if EDITOR is unset.
2. As noted above, Bash requires the xpg_echo option to be enabled
3. As noted above, Bash requires the xpg_echo option to be enabled
for the echo builtin to be fully conformant.
Bash can be configured to be POSIX-conformant by default, by
@@ -13600,141 +13609,140 @@ D.5 Concept Index
* yanking text: Readline Killing Commands.
(line 6)

Tag Table:
Node: Top893
Node: Introduction2826
Node: What is Bash?3039
Node: What is a shell?4172
Node: Definitions6782
Node: Basic Shell Features10109
Node: Shell Syntax11333
Node: Shell Operation12360
Node: Quoting13651
Node: Escape Character14989
Node: Single Quotes15524
Node: Double Quotes15873
Node: ANSI-C Quoting17218
Node: Locale Translation18612
Node: Creating Internationalized Scripts20015
Node: Comments24213
Node: Shell Commands24980
Node: Reserved Words25919
Node: Simple Commands26784
Node: Pipelines27446
Node: Lists30702
Node: Compound Commands32574
Node: Looping Constructs33583
Node: Conditional Constructs36132
Node: Command Grouping51202
Node: Coprocesses52694
Node: GNU Parallel55380
Node: Shell Functions56298
Node: Shell Parameters64746
Node: Positional Parameters69647
Node: Special Parameters70737
Node: Shell Expansions74198
Node: Brace Expansion76387
Node: Tilde Expansion79723
Node: Shell Parameter Expansion82678
Node: Command Substitution103321
Node: Arithmetic Expansion106850
Node: Process Substitution108026
Node: Word Splitting109134
Node: Filename Expansion111578
Node: Pattern Matching114802
Node: Quote Removal120525
Node: Redirections120829
Node: Executing Commands131092
Node: Simple Command Expansion131759
Node: Command Search and Execution133867
Node: Command Execution Environment136311
Node: Environment139759
Node: Exit Status141662
Node: Signals143720
Node: Shell Scripts148649
Node: Shell Builtin Commands151947
Node: Bourne Shell Builtins154058
Node: Bash Builtins180705
Node: Modifying Shell Behavior217629
Node: The Set Builtin217971
Node: The Shopt Builtin229965
Node: Special Builtins247017
Node: Shell Variables248006
Node: Bourne Shell Variables248440
Node: Bash Variables250948
Node: Bash Features290072
Node: Invoking Bash291086
Node: Bash Startup Files297670
Node: Interactive Shells302912
Node: What is an Interactive Shell?303320
Node: Is this Shell Interactive?303982
Node: Interactive Shell Behavior304806
Node: Bash Conditional Expressions308567
Node: Shell Arithmetic313984
Node: Aliases317313
Node: Arrays320447
Node: The Directory Stack328035
Node: Directory Stack Builtins328832
Node: Controlling the Prompt333277
Node: The Restricted Shell336162
Node: Bash POSIX Mode339044
Node: Shell Compatibility Mode357401
Node: Job Control366408
Node: Job Control Basics366865
Node: Job Control Builtins373233
Node: Job Control Variables379915
Node: Command Line Editing381146
Node: Introduction and Notation382849
Node: Readline Interaction385201
Node: Readline Bare Essentials386389
Node: Readline Movement Commands388197
Node: Readline Killing Commands389193
Node: Readline Arguments391216
Node: Searching392273
Node: Readline Init File394516
Node: Readline Init File Syntax395819
Node: Conditional Init Constructs422644
Node: Sample Init File427029
Node: Bindable Readline Commands430149
Node: Commands For Moving431687
Node: Commands For History434151
Node: Commands For Text439541
Node: Commands For Killing443666
Node: Numeric Arguments446454
Node: Commands For Completion447606
Node: Keyboard Macros453302
Node: Miscellaneous Commands454003
Node: Readline vi Mode460570
Node: Programmable Completion461547
Node: Programmable Completion Builtins470284
Node: A Programmable Completion Example482021
Node: Using History Interactively487366
Node: Bash History Facilities488047
Node: Bash History Builtins491782
Node: History Interaction498253
Node: Event Designators503203
Node: Word Designators504781
Node: Modifiers507173
Node: Installing Bash509110
Node: Basic Installation510226
Node: Compilers and Options514102
Node: Compiling For Multiple Architectures514852
Node: Installation Names516605
Node: Specifying the System Type518839
Node: Sharing Defaults519585
Node: Operation Controls520299
Node: Optional Features521318
Node: Reporting Bugs533698
Node: Major Differences From The Bourne Shell535055
Node: GNU Free Documentation License556481
Node: Indexes581658
Node: Builtin Index582109
Node: Reserved Word Index589207
Node: Variable Index591652
Node: Function Index609065
Node: Concept Index623060
Node: Top891
Node: Introduction2822
Node: What is Bash?3035
Node: What is a shell?4168
Node: Definitions6778
Node: Basic Shell Features10105
Node: Shell Syntax11329
Node: Shell Operation12356
Node: Quoting13647
Node: Escape Character14985
Node: Single Quotes15520
Node: Double Quotes15869
Node: ANSI-C Quoting17214
Node: Locale Translation18608
Node: Creating Internationalized Scripts20011
Node: Comments24209
Node: Shell Commands24976
Node: Reserved Words25915
Node: Simple Commands26780
Node: Pipelines27442
Node: Lists30698
Node: Compound Commands32570
Node: Looping Constructs33579
Node: Conditional Constructs36128
Node: Command Grouping51198
Node: Coprocesses52690
Node: GNU Parallel55376
Node: Shell Functions56294
Node: Shell Parameters64742
Node: Positional Parameters69643
Node: Special Parameters70733
Node: Shell Expansions74194
Node: Brace Expansion76383
Node: Tilde Expansion79719
Node: Shell Parameter Expansion82674
Node: Command Substitution103317
Node: Arithmetic Expansion106846
Node: Process Substitution108022
Node: Word Splitting109130
Node: Filename Expansion111574
Node: Pattern Matching114798
Node: Quote Removal120521
Node: Redirections120825
Node: Executing Commands131088
Node: Simple Command Expansion131755
Node: Command Search and Execution133863
Node: Command Execution Environment136307
Node: Environment139755
Node: Exit Status141658
Node: Signals143716
Node: Shell Scripts148645
Node: Shell Builtin Commands151943
Node: Bourne Shell Builtins154054
Node: Bash Builtins180701
Node: Modifying Shell Behavior217625
Node: The Set Builtin217967
Node: The Shopt Builtin229961
Node: Special Builtins247013
Node: Shell Variables248002
Node: Bourne Shell Variables248436
Node: Bash Variables250944
Node: Bash Features290068
Node: Invoking Bash291082
Node: Bash Startup Files297666
Node: Interactive Shells302908
Node: What is an Interactive Shell?303316
Node: Is this Shell Interactive?303978
Node: Interactive Shell Behavior304802
Node: Bash Conditional Expressions308563
Node: Shell Arithmetic313980
Node: Aliases317309
Node: Arrays320443
Node: The Directory Stack328031
Node: Directory Stack Builtins328828
Node: Controlling the Prompt333273
Node: The Restricted Shell336158
Node: Bash POSIX Mode339040
Node: Shell Compatibility Mode357986
Node: Job Control366993
Node: Job Control Basics367450
Node: Job Control Builtins373818
Node: Job Control Variables380500
Node: Command Line Editing381731
Node: Introduction and Notation383434
Node: Readline Interaction385786
Node: Readline Bare Essentials386974
Node: Readline Movement Commands388782
Node: Readline Killing Commands389778
Node: Readline Arguments391801
Node: Searching392858
Node: Readline Init File395101
Node: Readline Init File Syntax396404
Node: Conditional Init Constructs423229
Node: Sample Init File427614
Node: Bindable Readline Commands430734
Node: Commands For Moving432272
Node: Commands For History434736
Node: Commands For Text440126
Node: Commands For Killing444251
Node: Numeric Arguments447039
Node: Commands For Completion448191
Node: Keyboard Macros453887
Node: Miscellaneous Commands454588
Node: Readline vi Mode461155
Node: Programmable Completion462132
Node: Programmable Completion Builtins470869
Node: A Programmable Completion Example482606
Node: Using History Interactively487951
Node: Bash History Facilities488632
Node: Bash History Builtins492367
Node: History Interaction498838
Node: Event Designators503788
Node: Word Designators505366
Node: Modifiers507758
Node: Installing Bash509695
Node: Basic Installation510811
Node: Compilers and Options514687
Node: Compiling For Multiple Architectures515437
Node: Installation Names517190
Node: Specifying the System Type519424
Node: Sharing Defaults520170
Node: Operation Controls520884
Node: Optional Features521903
Node: Reporting Bugs534283
Node: Major Differences From The Bourne Shell535640
Node: GNU Free Documentation License557066
Node: Indexes582243
Node: Builtin Index582694
Node: Reserved Word Index589792
Node: Variable Index592237
Node: Function Index609650
Node: Concept Index623645

End Tag Table
BIN
View File
Binary file not shown.
+13 -13
View File
@@ -1,6 +1,6 @@
%!PS-Adobe-3.0
%%Creator: groff version 1.23.0
%%CreationDate: Tue Apr 22 10:00:28 2025
%%CreationDate: Fri May 30 08:52:48 2025
%%DocumentNeededResources: font Times-Italic
%%+ font Times-Roman
%%+ font Times-Bold
@@ -1469,18 +1469,18 @@ F1 .523(are each e)3.023 F -.25(va)-.25 G .523(luated as arith-).25 F
F .55(alue is usu-)-.25 F .595(ally an inte)108 424.8 R .595
(ger constant, b)-.15 F .595(ut may be an e)-.2 F 3.096(xpression. When)
-.15 F .596(\231+=\232 is applied to an array v)3.096 F .596
(ariable using com-)-.25 F .262(pound assignment \(see)108 436.8 R F2
(Arrays)2.761 E F1(belo)2.761 E .261(w\), the v)-.25 F(ariable')-.25 E
2.761(sv)-.55 G .261(alue is not unset \(as it is when using and ne)
-3.011 F 2.761(wv)-.25 G(alues)-3.011 E .437
(are appended to the array be)108 448.8 R .438
(ginning at one greater than the array')-.15 F 2.938(sm)-.55 G .438
(aximum inde)-2.938 F 2.938(x\()-.15 G .438(for inde)-2.938 F -.15(xe)
-.15 G 2.938(da).15 G .438(rrays\) or)-2.938 F .123
(added as additional k)108 460.8 R -.15(ey)-.1 G<ad76>.15 E .123
(alue pairs in an associati)-.25 F .423 -.15(ve a)-.25 H(rray).15 E
5.123(.W)-.65 G .122(hen applied to a string-v)-5.123 F .122(alued v)
-.25 F(ariable,)-.25 E F0(value)2.622 E F1(is e)108 472.8 Q
(ariable using com-)-.25 F .537(pound assignment \(see)108 436.8 R F2
(Arrays)3.036 E F1(belo)3.036 E .536(w\), the v)-.25 F(ariable')-.25 E
3.036(sv)-.55 G .536
(alue is not unset \(as it is when using \231=\232\), and ne)-3.286 F(w)
-.25 E -.25(va)108 448.8 S .431(lues are appended to the array be).25 F
.431(ginning at one greater than the array')-.15 F 2.931(sm)-.55 G .431
(aximum inde)-2.931 F 2.932(x\()-.15 G .432(for inde)-2.932 F -.15(xe)
-.15 G 2.932(da).15 G -.2(r-)-2.932 G .532
(rays\) or added as additional k)108 460.8 R -.15(ey)-.1 G<ad76>.15 E
.532(alue pairs in an associati)-.25 F .832 -.15(ve a)-.25 H(rray).15 E
5.532(.W)-.65 G .532(hen applied to a string-v)-5.532 F .531(alued v)
-.25 F(ari-)-.25 E(able,)108 472.8 Q F0(value)2.5 E F1(is e)2.5 E
(xpanded and appended to the v)-.15 E(ariable')-.25 E 2.5(sv)-.55 G
(alue.)-2.75 E 3.382(Av)108 489.6 S .882(ariable can be assigned the)
-3.632 F F0(namer)3.382 E(ef)-.37 E F1(attrib)3.382 E .882
BIN
View File
Binary file not shown.
+145 -134
View File
@@ -1,12 +1,12 @@
<!DOCTYPE html>
<html>
<!-- Created by GNU Texinfo 7.1, https://www.gnu.org/software/texinfo/ -->
<!-- Created by GNU Texinfo 7.2, https://www.gnu.org/software/texinfo/ -->
<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, 7 April 2025).
the Bash shell (version 5.3, 18 May 2025).
This is Edition 5.3, last updated 7 April 2025,
This is Edition 5.3, last updated 18 May 2025,
of The GNU Bash Reference Manual,
for Bash, Version 5.3.
@@ -77,10 +77,10 @@ Next: <a href="#Introduction" accesskey="n" rel="next">Introduction</a>, Previou
<h1 class="top" id="Bash-Features-1"><span>Bash Features<a class="copiable-link" href="#Bash-Features-1"> &para;</a></span></h1>
<p>This text is a brief description of the features that are present in
the Bash shell (version 5.3, 7 April 2025).
the Bash shell (version 5.3, 18 May 2025).
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 7 April 2025,
<p>This is Edition 5.3, last updated 18 May 2025,
of <cite class="cite">The GNU Bash Reference Manual</cite>,
for <code class="code">Bash</code>, Version 5.3.
</p>
@@ -99,70 +99,70 @@ The Bash manual page should be used as the definitive
reference on shell behavior.
</p>
<div class="element-contents" id="SEC_Contents">
<div class="region-contents" id="SEC_Contents">
<h2 class="contents-heading">Table of Contents</h2>
<div class="contents">
<ul class="toc-numbered-mark">
<li><a id="toc-Introduction-1" href="#Introduction">1 Introduction</a>
<li><a id="toc-Introduction" href="#Introduction">1 Introduction</a>
<ul class="toc-numbered-mark">
<li><a id="toc-What-is-Bash_003f-1" href="#What-is-Bash_003f">1.1 What is Bash?</a></li>
<li><a id="toc-What-is-a-shell_003f-1" href="#What-is-a-shell_003f">1.2 What is a shell?</a></li>
<li><a id="toc-What-is-Bash_003f" href="#What-is-Bash_003f">1.1 What is Bash?</a></li>
<li><a id="toc-What-is-a-shell_003f" href="#What-is-a-shell_003f">1.2 What is a shell?</a></li>
</ul></li>
<li><a id="toc-Definitions-1" href="#Definitions">2 Definitions</a></li>
<li><a id="toc-Basic-Shell-Features-1" href="#Basic-Shell-Features">3 Basic Shell Features</a>
<li><a id="toc-Definitions" href="#Definitions">2 Definitions</a></li>
<li><a id="toc-Basic-Shell-Features" href="#Basic-Shell-Features">3 Basic Shell Features</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Shell-Syntax-1" href="#Shell-Syntax">3.1 Shell Syntax</a>
<li><a id="toc-Shell-Syntax" href="#Shell-Syntax">3.1 Shell Syntax</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Shell-Operation-1" href="#Shell-Operation">3.1.1 Shell Operation</a></li>
<li><a id="toc-Quoting-1" href="#Quoting">3.1.2 Quoting</a>
<li><a id="toc-Shell-Operation" href="#Shell-Operation">3.1.1 Shell Operation</a></li>
<li><a id="toc-Quoting" href="#Quoting">3.1.2 Quoting</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Escape-Character-1" href="#Escape-Character">3.1.2.1 Escape Character</a></li>
<li><a id="toc-Single-Quotes-1" href="#Single-Quotes">3.1.2.2 Single Quotes</a></li>
<li><a id="toc-Double-Quotes-1" href="#Double-Quotes">3.1.2.3 Double Quotes</a></li>
<li><a id="toc-ANSI_002dC-Quoting-1" href="#ANSI_002dC-Quoting">3.1.2.4 ANSI-C Quoting</a></li>
<li><a id="toc-Escape-Character" href="#Escape-Character">3.1.2.1 Escape Character</a></li>
<li><a id="toc-Single-Quotes" href="#Single-Quotes">3.1.2.2 Single Quotes</a></li>
<li><a id="toc-Double-Quotes" href="#Double-Quotes">3.1.2.3 Double Quotes</a></li>
<li><a id="toc-ANSI_002dC-Quoting" href="#ANSI_002dC-Quoting">3.1.2.4 ANSI-C Quoting</a></li>
<li><a id="toc-Locale_002dSpecific-Translation" href="#Locale-Translation">3.1.2.5 Locale-Specific Translation</a></li>
</ul></li>
<li><a id="toc-Comments-1" href="#Comments">3.1.3 Comments</a></li>
<li><a id="toc-Comments" href="#Comments">3.1.3 Comments</a></li>
</ul></li>
<li><a id="toc-Shell-Commands-1" href="#Shell-Commands">3.2 Shell Commands</a>
<li><a id="toc-Shell-Commands" href="#Shell-Commands">3.2 Shell Commands</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Reserved-Words-1" href="#Reserved-Words">3.2.1 Reserved Words</a></li>
<li><a id="toc-Simple-Commands-1" href="#Simple-Commands">3.2.2 Simple Commands</a></li>
<li><a id="toc-Pipelines-1" href="#Pipelines">3.2.3 Pipelines</a></li>
<li><a id="toc-Reserved-Words" href="#Reserved-Words">3.2.1 Reserved Words</a></li>
<li><a id="toc-Simple-Commands" href="#Simple-Commands">3.2.2 Simple Commands</a></li>
<li><a id="toc-Pipelines" href="#Pipelines">3.2.3 Pipelines</a></li>
<li><a id="toc-Lists-of-Commands" href="#Lists">3.2.4 Lists of Commands</a></li>
<li><a id="toc-Compound-Commands-1" href="#Compound-Commands">3.2.5 Compound Commands</a>
<li><a id="toc-Compound-Commands" href="#Compound-Commands">3.2.5 Compound Commands</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Looping-Constructs-1" href="#Looping-Constructs">3.2.5.1 Looping Constructs</a></li>
<li><a id="toc-Conditional-Constructs-1" href="#Conditional-Constructs">3.2.5.2 Conditional Constructs</a></li>
<li><a id="toc-Looping-Constructs" href="#Looping-Constructs">3.2.5.1 Looping Constructs</a></li>
<li><a id="toc-Conditional-Constructs" href="#Conditional-Constructs">3.2.5.2 Conditional Constructs</a></li>
<li><a id="toc-Grouping-Commands" href="#Command-Grouping">3.2.5.3 Grouping Commands</a></li>
</ul></li>
<li><a id="toc-Coprocesses-1" href="#Coprocesses">3.2.6 Coprocesses</a></li>
<li><a id="toc-GNU-Parallel-1" href="#GNU-Parallel">3.2.7 GNU Parallel</a></li>
<li><a id="toc-Coprocesses" href="#Coprocesses">3.2.6 Coprocesses</a></li>
<li><a id="toc-GNU-Parallel" href="#GNU-Parallel">3.2.7 GNU Parallel</a></li>
</ul></li>
<li><a id="toc-Shell-Functions-1" href="#Shell-Functions">3.3 Shell Functions</a></li>
<li><a id="toc-Shell-Parameters-1" href="#Shell-Parameters">3.4 Shell Parameters</a>
<li><a id="toc-Shell-Functions" href="#Shell-Functions">3.3 Shell Functions</a></li>
<li><a id="toc-Shell-Parameters" href="#Shell-Parameters">3.4 Shell Parameters</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Positional-Parameters-1" href="#Positional-Parameters">3.4.1 Positional Parameters</a></li>
<li><a id="toc-Special-Parameters-1" href="#Special-Parameters">3.4.2 Special Parameters</a></li>
<li><a id="toc-Positional-Parameters" href="#Positional-Parameters">3.4.1 Positional Parameters</a></li>
<li><a id="toc-Special-Parameters" href="#Special-Parameters">3.4.2 Special Parameters</a></li>
</ul></li>
<li><a id="toc-Shell-Expansions-1" href="#Shell-Expansions">3.5 Shell Expansions</a>
<li><a id="toc-Shell-Expansions" href="#Shell-Expansions">3.5 Shell Expansions</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Brace-Expansion-1" href="#Brace-Expansion">3.5.1 Brace Expansion</a></li>
<li><a id="toc-Tilde-Expansion-1" href="#Tilde-Expansion">3.5.2 Tilde Expansion</a></li>
<li><a id="toc-Shell-Parameter-Expansion-1" href="#Shell-Parameter-Expansion">3.5.3 Shell Parameter Expansion</a></li>
<li><a id="toc-Command-Substitution-1" href="#Command-Substitution">3.5.4 Command Substitution</a></li>
<li><a id="toc-Arithmetic-Expansion-1" href="#Arithmetic-Expansion">3.5.5 Arithmetic Expansion</a></li>
<li><a id="toc-Process-Substitution-1" href="#Process-Substitution">3.5.6 Process Substitution</a></li>
<li><a id="toc-Word-Splitting-1" href="#Word-Splitting">3.5.7 Word Splitting</a></li>
<li><a id="toc-Filename-Expansion-1" href="#Filename-Expansion">3.5.8 Filename Expansion</a>
<li><a id="toc-Brace-Expansion" href="#Brace-Expansion">3.5.1 Brace Expansion</a></li>
<li><a id="toc-Tilde-Expansion" href="#Tilde-Expansion">3.5.2 Tilde Expansion</a></li>
<li><a id="toc-Shell-Parameter-Expansion" href="#Shell-Parameter-Expansion">3.5.3 Shell Parameter Expansion</a></li>
<li><a id="toc-Command-Substitution" href="#Command-Substitution">3.5.4 Command Substitution</a></li>
<li><a id="toc-Arithmetic-Expansion" href="#Arithmetic-Expansion">3.5.5 Arithmetic Expansion</a></li>
<li><a id="toc-Process-Substitution" href="#Process-Substitution">3.5.6 Process Substitution</a></li>
<li><a id="toc-Word-Splitting" href="#Word-Splitting">3.5.7 Word Splitting</a></li>
<li><a id="toc-Filename-Expansion" href="#Filename-Expansion">3.5.8 Filename Expansion</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Pattern-Matching-1" href="#Pattern-Matching">3.5.8.1 Pattern Matching</a></li>
<li><a id="toc-Pattern-Matching" href="#Pattern-Matching">3.5.8.1 Pattern Matching</a></li>
</ul></li>
<li><a id="toc-Quote-Removal-1" href="#Quote-Removal">3.5.9 Quote Removal</a></li>
<li><a id="toc-Quote-Removal" href="#Quote-Removal">3.5.9 Quote Removal</a></li>
</ul></li>
<li><a id="toc-Redirections-1" href="#Redirections">3.6 Redirections</a>
<li><a id="toc-Redirections" href="#Redirections">3.6 Redirections</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Redirecting-Input" href="#Redirecting-Input">3.6.1 Redirecting Input</a></li>
<li><a id="toc-Redirecting-Output" href="#Redirecting-Output">3.6.2 Redirecting Output</a></li>
@@ -175,134 +175,134 @@ reference on shell behavior.
<li><a id="toc-Moving-File-Descriptors" href="#Moving-File-Descriptors">3.6.9 Moving File Descriptors</a></li>
<li><a id="toc-Opening-File-Descriptors-for-Reading-and-Writing" href="#Opening-File-Descriptors-for-Reading-and-Writing">3.6.10 Opening File Descriptors for Reading and Writing</a></li>
</ul></li>
<li><a id="toc-Executing-Commands-1" href="#Executing-Commands">3.7 Executing Commands</a>
<li><a id="toc-Executing-Commands" href="#Executing-Commands">3.7 Executing Commands</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Simple-Command-Expansion-1" href="#Simple-Command-Expansion">3.7.1 Simple Command Expansion</a></li>
<li><a id="toc-Command-Search-and-Execution-1" href="#Command-Search-and-Execution">3.7.2 Command Search and Execution</a></li>
<li><a id="toc-Command-Execution-Environment-1" href="#Command-Execution-Environment">3.7.3 Command Execution Environment</a></li>
<li><a id="toc-Environment-1" href="#Environment">3.7.4 Environment</a></li>
<li><a id="toc-Exit-Status-1" href="#Exit-Status">3.7.5 Exit Status</a></li>
<li><a id="toc-Signals-1" href="#Signals">3.7.6 Signals</a></li>
<li><a id="toc-Simple-Command-Expansion" href="#Simple-Command-Expansion">3.7.1 Simple Command Expansion</a></li>
<li><a id="toc-Command-Search-and-Execution" href="#Command-Search-and-Execution">3.7.2 Command Search and Execution</a></li>
<li><a id="toc-Command-Execution-Environment" href="#Command-Execution-Environment">3.7.3 Command Execution Environment</a></li>
<li><a id="toc-Environment" href="#Environment">3.7.4 Environment</a></li>
<li><a id="toc-Exit-Status" href="#Exit-Status">3.7.5 Exit Status</a></li>
<li><a id="toc-Signals" href="#Signals">3.7.6 Signals</a></li>
</ul></li>
<li><a id="toc-Shell-Scripts-1" href="#Shell-Scripts">3.8 Shell Scripts</a></li>
<li><a id="toc-Shell-Scripts" href="#Shell-Scripts">3.8 Shell Scripts</a></li>
</ul></li>
<li><a id="toc-Shell-Builtin-Commands-1" href="#Shell-Builtin-Commands">4 Shell Builtin Commands</a>
<li><a id="toc-Shell-Builtin-Commands" href="#Shell-Builtin-Commands">4 Shell Builtin Commands</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Bourne-Shell-Builtins-1" href="#Bourne-Shell-Builtins">4.1 Bourne Shell Builtins</a></li>
<li><a id="toc-Bourne-Shell-Builtins" href="#Bourne-Shell-Builtins">4.1 Bourne Shell Builtins</a></li>
<li><a id="toc-Bash-Builtin-Commands" href="#Bash-Builtins">4.2 Bash Builtin Commands</a></li>
<li><a id="toc-Modifying-Shell-Behavior-1" href="#Modifying-Shell-Behavior">4.3 Modifying Shell Behavior</a>
<li><a id="toc-Modifying-Shell-Behavior" href="#Modifying-Shell-Behavior">4.3 Modifying Shell Behavior</a>
<ul class="toc-numbered-mark">
<li><a id="toc-The-Set-Builtin-1" href="#The-Set-Builtin">4.3.1 The Set Builtin</a></li>
<li><a id="toc-The-Shopt-Builtin-1" href="#The-Shopt-Builtin">4.3.2 The Shopt Builtin</a></li>
<li><a id="toc-The-Set-Builtin" href="#The-Set-Builtin">4.3.1 The Set Builtin</a></li>
<li><a id="toc-The-Shopt-Builtin" href="#The-Shopt-Builtin">4.3.2 The Shopt Builtin</a></li>
</ul></li>
<li><a id="toc-Special-Builtins-1" href="#Special-Builtins">4.4 Special Builtins</a></li>
<li><a id="toc-Special-Builtins" href="#Special-Builtins">4.4 Special Builtins</a></li>
</ul></li>
<li><a id="toc-Shell-Variables-1" href="#Shell-Variables">5 Shell Variables</a>
<li><a id="toc-Shell-Variables" href="#Shell-Variables">5 Shell Variables</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Bourne-Shell-Variables-1" href="#Bourne-Shell-Variables">5.1 Bourne Shell Variables</a></li>
<li><a id="toc-Bash-Variables-1" href="#Bash-Variables">5.2 Bash Variables</a></li>
<li><a id="toc-Bourne-Shell-Variables" href="#Bourne-Shell-Variables">5.1 Bourne Shell Variables</a></li>
<li><a id="toc-Bash-Variables" href="#Bash-Variables">5.2 Bash Variables</a></li>
</ul></li>
<li><a id="toc-Bash-Features-2" href="#Bash-Features">6 Bash Features</a>
<li><a id="toc-Bash-Features-1" href="#Bash-Features">6 Bash Features</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Invoking-Bash-1" href="#Invoking-Bash">6.1 Invoking Bash</a></li>
<li><a id="toc-Bash-Startup-Files-1" href="#Bash-Startup-Files">6.2 Bash Startup Files</a></li>
<li><a id="toc-Interactive-Shells-1" href="#Interactive-Shells">6.3 Interactive Shells</a>
<li><a id="toc-Invoking-Bash" href="#Invoking-Bash">6.1 Invoking Bash</a></li>
<li><a id="toc-Bash-Startup-Files" href="#Bash-Startup-Files">6.2 Bash Startup Files</a></li>
<li><a id="toc-Interactive-Shells" href="#Interactive-Shells">6.3 Interactive Shells</a>
<ul class="toc-numbered-mark">
<li><a id="toc-What-is-an-Interactive-Shell_003f-1" href="#What-is-an-Interactive-Shell_003f">6.3.1 What is an Interactive Shell?</a></li>
<li><a id="toc-Is-this-Shell-Interactive_003f-1" href="#Is-this-Shell-Interactive_003f">6.3.2 Is this Shell Interactive?</a></li>
<li><a id="toc-Interactive-Shell-Behavior-1" href="#Interactive-Shell-Behavior">6.3.3 Interactive Shell Behavior</a></li>
<li><a id="toc-What-is-an-Interactive-Shell_003f" href="#What-is-an-Interactive-Shell_003f">6.3.1 What is an Interactive Shell?</a></li>
<li><a id="toc-Is-this-Shell-Interactive_003f" href="#Is-this-Shell-Interactive_003f">6.3.2 Is this Shell Interactive?</a></li>
<li><a id="toc-Interactive-Shell-Behavior" href="#Interactive-Shell-Behavior">6.3.3 Interactive Shell Behavior</a></li>
</ul></li>
<li><a id="toc-Bash-Conditional-Expressions-1" href="#Bash-Conditional-Expressions">6.4 Bash Conditional Expressions</a></li>
<li><a id="toc-Shell-Arithmetic-1" href="#Shell-Arithmetic">6.5 Shell Arithmetic</a></li>
<li><a id="toc-Aliases-1" href="#Aliases">6.6 Aliases</a></li>
<li><a id="toc-Arrays-1" href="#Arrays">6.7 Arrays</a></li>
<li><a id="toc-The-Directory-Stack-1" href="#The-Directory-Stack">6.8 The Directory Stack</a>
<li><a id="toc-Bash-Conditional-Expressions" href="#Bash-Conditional-Expressions">6.4 Bash Conditional Expressions</a></li>
<li><a id="toc-Shell-Arithmetic" href="#Shell-Arithmetic">6.5 Shell Arithmetic</a></li>
<li><a id="toc-Aliases" href="#Aliases">6.6 Aliases</a></li>
<li><a id="toc-Arrays" href="#Arrays">6.7 Arrays</a></li>
<li><a id="toc-The-Directory-Stack" href="#The-Directory-Stack">6.8 The Directory Stack</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Directory-Stack-Builtins-1" href="#Directory-Stack-Builtins">6.8.1 Directory Stack Builtins</a></li>
<li><a id="toc-Directory-Stack-Builtins" href="#Directory-Stack-Builtins">6.8.1 Directory Stack Builtins</a></li>
</ul></li>
<li><a id="toc-Controlling-the-Prompt-1" href="#Controlling-the-Prompt">6.9 Controlling the Prompt</a></li>
<li><a id="toc-The-Restricted-Shell-1" href="#The-Restricted-Shell">6.10 The Restricted Shell</a></li>
<li><a id="toc-Controlling-the-Prompt" href="#Controlling-the-Prompt">6.9 Controlling the Prompt</a></li>
<li><a id="toc-The-Restricted-Shell" href="#The-Restricted-Shell">6.10 The Restricted Shell</a></li>
<li><a id="toc-Bash-and-POSIX" href="#Bash-POSIX-Mode">6.11 Bash and POSIX</a>
<ul class="toc-numbered-mark">
<li><a id="toc-What-is-POSIX_003f" href="#What-is-POSIX_003f">6.11.1 What is POSIX?</a></li>
<li><a id="toc-Bash-POSIX-Mode-1" href="#Bash-POSIX-Mode-1">6.11.2 Bash POSIX Mode</a></li>
<li><a id="toc-Bash-POSIX-Mode" href="#Bash-POSIX-Mode-1">6.11.2 Bash POSIX Mode</a></li>
</ul></li>
<li><a id="toc-Shell-Compatibility-Mode-1" href="#Shell-Compatibility-Mode">6.12 Shell Compatibility Mode</a></li>
<li><a id="toc-Shell-Compatibility-Mode" href="#Shell-Compatibility-Mode">6.12 Shell Compatibility Mode</a></li>
</ul></li>
<li><a id="toc-Job-Control-1" href="#Job-Control">7 Job Control</a>
<li><a id="toc-Job-Control" href="#Job-Control">7 Job Control</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Job-Control-Basics-1" href="#Job-Control-Basics">7.1 Job Control Basics</a></li>
<li><a id="toc-Job-Control-Builtins-1" href="#Job-Control-Builtins">7.2 Job Control Builtins</a></li>
<li><a id="toc-Job-Control-Variables-1" href="#Job-Control-Variables">7.3 Job Control Variables</a></li>
<li><a id="toc-Job-Control-Basics" href="#Job-Control-Basics">7.1 Job Control Basics</a></li>
<li><a id="toc-Job-Control-Builtins" href="#Job-Control-Builtins">7.2 Job Control Builtins</a></li>
<li><a id="toc-Job-Control-Variables" href="#Job-Control-Variables">7.3 Job Control Variables</a></li>
</ul></li>
<li><a id="toc-Command-Line-Editing-1" href="#Command-Line-Editing">8 Command Line Editing</a>
<li><a id="toc-Command-Line-Editing" href="#Command-Line-Editing">8 Command Line Editing</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Introduction-to-Line-Editing" href="#Introduction-and-Notation">8.1 Introduction to Line Editing</a></li>
<li><a id="toc-Readline-Interaction-1" href="#Readline-Interaction">8.2 Readline Interaction</a>
<li><a id="toc-Readline-Interaction" href="#Readline-Interaction">8.2 Readline Interaction</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Readline-Bare-Essentials-1" href="#Readline-Bare-Essentials">8.2.1 Readline Bare Essentials</a></li>
<li><a id="toc-Readline-Movement-Commands-1" href="#Readline-Movement-Commands">8.2.2 Readline Movement Commands</a></li>
<li><a id="toc-Readline-Killing-Commands-1" href="#Readline-Killing-Commands">8.2.3 Readline Killing Commands</a></li>
<li><a id="toc-Readline-Arguments-1" href="#Readline-Arguments">8.2.4 Readline Arguments</a></li>
<li><a id="toc-Readline-Bare-Essentials" href="#Readline-Bare-Essentials">8.2.1 Readline Bare Essentials</a></li>
<li><a id="toc-Readline-Movement-Commands" href="#Readline-Movement-Commands">8.2.2 Readline Movement Commands</a></li>
<li><a id="toc-Readline-Killing-Commands" href="#Readline-Killing-Commands">8.2.3 Readline Killing Commands</a></li>
<li><a id="toc-Readline-Arguments" href="#Readline-Arguments">8.2.4 Readline Arguments</a></li>
<li><a id="toc-Searching-for-Commands-in-the-History" href="#Searching">8.2.5 Searching for Commands in the History</a></li>
</ul></li>
<li><a id="toc-Readline-Init-File-1" href="#Readline-Init-File">8.3 Readline Init File</a>
<li><a id="toc-Readline-Init-File" href="#Readline-Init-File">8.3 Readline Init File</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Readline-Init-File-Syntax-1" href="#Readline-Init-File-Syntax">8.3.1 Readline Init File Syntax</a></li>
<li><a id="toc-Conditional-Init-Constructs-1" href="#Conditional-Init-Constructs">8.3.2 Conditional Init Constructs</a></li>
<li><a id="toc-Sample-Init-File-1" href="#Sample-Init-File">8.3.3 Sample Init File</a></li>
<li><a id="toc-Readline-Init-File-Syntax" href="#Readline-Init-File-Syntax">8.3.1 Readline Init File Syntax</a></li>
<li><a id="toc-Conditional-Init-Constructs" href="#Conditional-Init-Constructs">8.3.2 Conditional Init Constructs</a></li>
<li><a id="toc-Sample-Init-File" href="#Sample-Init-File">8.3.3 Sample Init File</a></li>
</ul></li>
<li><a id="toc-Bindable-Readline-Commands-1" href="#Bindable-Readline-Commands">8.4 Bindable Readline Commands</a>
<li><a id="toc-Bindable-Readline-Commands" href="#Bindable-Readline-Commands">8.4 Bindable Readline Commands</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Commands-For-Moving-1" href="#Commands-For-Moving">8.4.1 Commands For Moving</a></li>
<li><a id="toc-Commands-For-Moving" href="#Commands-For-Moving">8.4.1 Commands For Moving</a></li>
<li><a id="toc-Commands-For-Manipulating-The-History" href="#Commands-For-History">8.4.2 Commands For Manipulating The History</a></li>
<li><a id="toc-Commands-For-Changing-Text" href="#Commands-For-Text">8.4.3 Commands For Changing Text</a></li>
<li><a id="toc-Killing-And-Yanking" href="#Commands-For-Killing">8.4.4 Killing And Yanking</a></li>
<li><a id="toc-Specifying-Numeric-Arguments" href="#Numeric-Arguments">8.4.5 Specifying Numeric Arguments</a></li>
<li><a id="toc-Letting-Readline-Type-For-You" href="#Commands-For-Completion">8.4.6 Letting Readline Type For You</a></li>
<li><a id="toc-Keyboard-Macros-1" href="#Keyboard-Macros">8.4.7 Keyboard Macros</a></li>
<li><a id="toc-Keyboard-Macros" href="#Keyboard-Macros">8.4.7 Keyboard Macros</a></li>
<li><a id="toc-Some-Miscellaneous-Commands" href="#Miscellaneous-Commands">8.4.8 Some Miscellaneous Commands</a></li>
</ul></li>
<li><a id="toc-Readline-vi-Mode-1" href="#Readline-vi-Mode">8.5 Readline vi Mode</a></li>
<li><a id="toc-Programmable-Completion-1" href="#Programmable-Completion">8.6 Programmable Completion</a></li>
<li><a id="toc-Programmable-Completion-Builtins-1" href="#Programmable-Completion-Builtins">8.7 Programmable Completion Builtins</a></li>
<li><a id="toc-A-Programmable-Completion-Example-1" href="#A-Programmable-Completion-Example">8.8 A Programmable Completion Example</a></li>
<li><a id="toc-Readline-vi-Mode" href="#Readline-vi-Mode">8.5 Readline vi Mode</a></li>
<li><a id="toc-Programmable-Completion" href="#Programmable-Completion">8.6 Programmable Completion</a></li>
<li><a id="toc-Programmable-Completion-Builtins" href="#Programmable-Completion-Builtins">8.7 Programmable Completion Builtins</a></li>
<li><a id="toc-A-Programmable-Completion-Example" href="#A-Programmable-Completion-Example">8.8 A Programmable Completion Example</a></li>
</ul></li>
<li><a id="toc-Using-History-Interactively-1" href="#Using-History-Interactively">9 Using History Interactively</a>
<li><a id="toc-Using-History-Interactively" href="#Using-History-Interactively">9 Using History Interactively</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Bash-History-Facilities-1" href="#Bash-History-Facilities">9.1 Bash History Facilities</a></li>
<li><a id="toc-Bash-History-Builtins-1" href="#Bash-History-Builtins">9.2 Bash History Builtins</a></li>
<li><a id="toc-Bash-History-Facilities" href="#Bash-History-Facilities">9.1 Bash History Facilities</a></li>
<li><a id="toc-Bash-History-Builtins" href="#Bash-History-Builtins">9.2 Bash History Builtins</a></li>
<li><a id="toc-History-Expansion" href="#History-Interaction">9.3 History Expansion</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Event-Designators-1" href="#Event-Designators">9.3.1 Event Designators</a></li>
<li><a id="toc-Word-Designators-1" href="#Word-Designators">9.3.2 Word Designators</a></li>
<li><a id="toc-Modifiers-1" href="#Modifiers">9.3.3 Modifiers</a></li>
<li><a id="toc-Event-Designators" href="#Event-Designators">9.3.1 Event Designators</a></li>
<li><a id="toc-Word-Designators" href="#Word-Designators">9.3.2 Word Designators</a></li>
<li><a id="toc-Modifiers" href="#Modifiers">9.3.3 Modifiers</a></li>
</ul></li>
</ul></li>
<li><a id="toc-Installing-Bash-1" href="#Installing-Bash">10 Installing Bash</a>
<li><a id="toc-Installing-Bash" href="#Installing-Bash">10 Installing Bash</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Basic-Installation-1" href="#Basic-Installation">10.1 Basic Installation</a></li>
<li><a id="toc-Compilers-and-Options-1" href="#Compilers-and-Options">10.2 Compilers and Options</a></li>
<li><a id="toc-Compiling-For-Multiple-Architectures-1" href="#Compiling-For-Multiple-Architectures">10.3 Compiling For Multiple Architectures</a></li>
<li><a id="toc-Installation-Names-1" href="#Installation-Names">10.4 Installation Names</a></li>
<li><a id="toc-Specifying-the-System-Type-1" href="#Specifying-the-System-Type">10.5 Specifying the System Type</a></li>
<li><a id="toc-Sharing-Defaults-1" href="#Sharing-Defaults">10.6 Sharing Defaults</a></li>
<li><a id="toc-Operation-Controls-1" href="#Operation-Controls">10.7 Operation Controls</a></li>
<li><a id="toc-Optional-Features-1" href="#Optional-Features">10.8 Optional Features</a></li>
<li><a id="toc-Basic-Installation" href="#Basic-Installation">10.1 Basic Installation</a></li>
<li><a id="toc-Compilers-and-Options" href="#Compilers-and-Options">10.2 Compilers and Options</a></li>
<li><a id="toc-Compiling-For-Multiple-Architectures" href="#Compiling-For-Multiple-Architectures">10.3 Compiling For Multiple Architectures</a></li>
<li><a id="toc-Installation-Names" href="#Installation-Names">10.4 Installation Names</a></li>
<li><a id="toc-Specifying-the-System-Type" href="#Specifying-the-System-Type">10.5 Specifying the System Type</a></li>
<li><a id="toc-Sharing-Defaults" href="#Sharing-Defaults">10.6 Sharing Defaults</a></li>
<li><a id="toc-Operation-Controls" href="#Operation-Controls">10.7 Operation Controls</a></li>
<li><a id="toc-Optional-Features" href="#Optional-Features">10.8 Optional Features</a></li>
</ul></li>
<li><a id="toc-Reporting-Bugs-1" href="#Reporting-Bugs">Appendix A Reporting Bugs</a></li>
<li><a id="toc-Major-Differences-From-The-Bourne-Shell-1" href="#Major-Differences-From-The-Bourne-Shell">Appendix B Major Differences From The Bourne Shell</a>
<li><a id="toc-Reporting-Bugs" href="#Reporting-Bugs">Appendix A Reporting Bugs</a></li>
<li><a id="toc-Major-Differences-From-The-Bourne-Shell" href="#Major-Differences-From-The-Bourne-Shell">Appendix B Major Differences From The Bourne Shell</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Implementation-Differences-From-The-SVR4_002e2-Shell" href="#Implementation-Differences-From-The-SVR4_002e2-Shell">B.1 Implementation Differences From The SVR4.2 Shell</a></li>
</ul></li>
<li><a id="toc-GNU-Free-Documentation-License-1" href="#GNU-Free-Documentation-License">Appendix C GNU Free Documentation License</a></li>
<li><a id="toc-Indexes-1" href="#Indexes">Appendix D Indexes</a>
<li><a id="toc-GNU-Free-Documentation-License" href="#GNU-Free-Documentation-License">Appendix C GNU Free Documentation License</a></li>
<li><a id="toc-Indexes" href="#Indexes">Appendix D Indexes</a>
<ul class="toc-numbered-mark">
<li><a id="toc-Index-of-Shell-Builtin-Commands" href="#Builtin-Index" rel="index">D.1 Index of Shell Builtin Commands</a></li>
<li><a id="toc-Index-of-Shell-Reserved-Words" href="#Reserved-Word-Index" rel="index">D.2 Index of Shell Reserved Words</a></li>
<li><a id="toc-Parameter-and-Variable-Index" href="#Variable-Index" rel="index">D.3 Parameter and Variable Index</a></li>
<li><a id="toc-Function-Index-1" href="#Function-Index" rel="index">D.4 Function Index</a></li>
<li><a id="toc-Concept-Index-1" href="#Concept-Index" rel="index">D.5 Concept Index</a></li>
<li><a id="toc-Function-Index" href="#Function-Index" rel="index">D.4 Function Index</a></li>
<li><a id="toc-Concept-Index" href="#Concept-Index" rel="index">D.5 Concept Index</a></li>
</ul></li>
</ul>
</div>
@@ -9562,7 +9562,8 @@ not when the function is executed, because a function definition
is itself a command.
As a consequence, aliases
defined in a function are not available until after that
function is executed. To be safe, always put
function is executed.
To be safe, always put
alias definitions on a separate line, and do not use <code class="code">alias</code>
in compound commands.
</p>
@@ -10531,12 +10532,22 @@ statuses after the <code class="code">wait</code> builtin returns it.
</li></ol>
<p>There is other <small class="sc">POSIX</small> behavior that Bash does not implement by
<p>There is additional <small class="sc">POSIX</small> behavior that Bash does not implement by
default even when in <small class="sc">POSIX</small> mode.
Specifically:
</p>
<ol class="enumerate">
<li> The <code class="code">fc</code> builtin checks <code class="code">$EDITOR</code> as a program to edit history
<li> <small class="sc">POSIX</small> requires that word splitting be byte-oriented.
That is, each <em class="emph">byte</em> in the value of <code class="env">IFS</code> potentially splits a
word, even if that byte is part of a multibyte character in <code class="env">IFS</code>
or part of multibyte character in the word.
Bash allows multibyte characters in the value of <code class="env">IFS</code>, treating
a valid multibyte character as a single delimiter, and will not
split a valid multibyte character even if one of the bytes composing that
character appears in <code class="env">IFS</code>.
This is <small class="sc">POSIX</small> interpretation 1560, further modified by issue 1924.
</li><li> The <code class="code">fc</code> builtin checks <code class="code">$EDITOR</code> as a program to edit history
entries if <code class="code">FCEDIT</code> is unset, rather than defaulting directly to
<code class="code">ed</code>.
<code class="code">fc</code> uses <code class="code">ed</code> if <code class="code">EDITOR</code> is unset.
@@ -12866,7 +12877,7 @@ This is how to insert key sequences like <kbd class="kbd">C-q</kbd>, for example
</p>
</dd>
<dt><a id="index-self_002dinsert-_0028a_002c-b_002c-A_002c-1_002c-_0021_002c-_2026_0029"></a><span><code class="code">self-insert (a, b, A, 1, !, &hellip;)</code><a class="copiable-link" href="#index-self_002dinsert-_0028a_002c-b_002c-A_002c-1_002c-_0021_002c-_2026_0029"> &para;</a></span></dt>
<dt><a id="index-self_002dinsert-_0028a_002c-b_002c-A_002c-1_002c-_0021_002c-_002e_002e_002e_0029"></a><span><code class="code">self-insert (a, b, A, 1, !, &hellip;)</code><a class="copiable-link" href="#index-self_002dinsert-_0028a_002c-b_002c-A_002c-1_002c-_0021_002c-_002e_002e_002e_0029"> &para;</a></span></dt>
<dd><p>Insert the character typed.
</p>
</dd>
@@ -13059,7 +13070,7 @@ Next: <a href="#Commands-For-Completion" accesskey="n" rel="next">Letting Readli
</div>
<h4 class="subsection" id="Specifying-Numeric-Arguments"><span>8.4.5 Specifying Numeric Arguments<a class="copiable-link" href="#Specifying-Numeric-Arguments"> &para;</a></span></h4>
<dl class="ftable">
<dt><a id="index-digit_002dargument-_0028M_002d0_002c-M_002d1_002c-_2026-M_002d_002d_0029"></a><span><code class="code">digit-argument (<kbd class="kbd">M-0</kbd>, <kbd class="kbd">M-1</kbd>, &hellip; <kbd class="kbd">M--</kbd>)</code><a class="copiable-link" href="#index-digit_002dargument-_0028M_002d0_002c-M_002d1_002c-_2026-M_002d_002d_0029"> &para;</a></span></dt>
<dt><a id="index-digit_002dargument-_0028M_002d0_002c-M_002d1_002c-_002e_002e_002e-M_002d_002d_0029"></a><span><code class="code">digit-argument (<kbd class="kbd">M-0</kbd>, <kbd class="kbd">M-1</kbd>, &hellip; <kbd class="kbd">M--</kbd>)</code><a class="copiable-link" href="#index-digit_002dargument-_0028M_002d0_002c-M_002d1_002c-_002e_002e_002e-M_002d_002d_0029"> &para;</a></span></dt>
<dd><p>Add this digit to the argument already accumulating, or start a new
argument.
<kbd class="kbd">M--</kbd> starts a negative argument.
@@ -13298,7 +13309,7 @@ ring the terminal&rsquo;s bell (subject to the setting of
<code class="code">bell-style</code>).
</p>
</dd>
<dt><a id="index-do_002dlowercase_002dversion-_0028M_002dA_002c-M_002dB_002c-M_002dx_002c-_2026_0029"></a><span><code class="code">do-lowercase-version (M-A, M-B, M-<var class="var">x</var>, &hellip;)</code><a class="copiable-link" href="#index-do_002dlowercase_002dversion-_0028M_002dA_002c-M_002dB_002c-M_002dx_002c-_2026_0029"> &para;</a></span></dt>
<dt><a id="index-do_002dlowercase_002dversion-_0028M_002dA_002c-M_002dB_002c-M_002dx_002c-_002e_002e_002e_0029"></a><span><code class="code">do-lowercase-version (M-A, M-B, M-<var class="var">x</var>, &hellip;)</code><a class="copiable-link" href="#index-do_002dlowercase_002dversion-_0028M_002dA_002c-M_002dB_002c-M_002dx_002c-_002e_002e_002e_0029"> &para;</a></span></dt>
<dd><p>If the metafied character <var class="var">x</var> is upper case, run the command
that is bound to the corresponding metafied lower case character.
The behavior is undefined if <var class="var">x</var> is already lower case.
@@ -16650,7 +16661,7 @@ Next: <a href="#Reserved-Word-Index" accesskey="n" rel="next">Index of Shell Res
<a class="summary-letter-printindex" href="#Builtin-Index_bt_letter-W"><b>W</b></a>
&nbsp;
</td></tr></table>
<table class="bt-entries-printindex" border="0">
<table class="bt-entries-printindex">
<tr><td></td><th class="entries-header-printindex">Index Entry</th><th class="sections-header-printindex">Section</th></tr>
<tr><td colspan="3"><hr></td></tr>
<tr><th id="Builtin-Index_bt_symbol-1">:</th></tr>
@@ -16842,7 +16853,7 @@ Next: <a href="#Variable-Index" accesskey="n" rel="next">Parameter and Variable
<a class="summary-letter-printindex" href="#Reserved-Word-Index_rw_letter-W"><b>W</b></a>
&nbsp;
</td></tr></table>
<table class="rw-entries-printindex" border="0">
<table class="rw-entries-printindex">
<tr><td></td><th class="entries-header-printindex">Index Entry</th><th class="sections-header-printindex">Section</th></tr>
<tr><td colspan="3"><hr></td></tr>
<tr><th id="Reserved-Word-Index_rw_symbol-1">!</th></tr>
@@ -16994,7 +17005,7 @@ Next: <a href="#Function-Index" accesskey="n" rel="next">Function Index</a>, Pre
<a class="summary-letter-printindex" href="#Variable-Index_vr_letter-V"><b>V</b></a>
&nbsp;
</td></tr></table>
<table class="vr-entries-printindex" border="0">
<table class="vr-entries-printindex">
<tr><td></td><th class="entries-header-printindex">Index Entry</th><th class="sections-header-printindex">Section</th></tr>
<tr><td colspan="3"><hr></td></tr>
<tr><th id="Variable-Index_vr_symbol-1">_</th></tr>
@@ -17343,7 +17354,7 @@ Next: <a href="#Concept-Index" accesskey="n" rel="next">Concept Index</a>, Previ
<a class="summary-letter-printindex" href="#Function-Index_fn_letter-Y"><b>Y</b></a>
&nbsp;
</td></tr></table>
<table class="fn-entries-printindex" border="0">
<table class="fn-entries-printindex">
<tr><td></td><th class="entries-header-printindex">Index Entry</th><th class="sections-header-printindex">Section</th></tr>
<tr><td colspan="3"><hr></td></tr>
<tr><th id="Function-Index_fn_letter-A">A</th></tr>
@@ -17384,9 +17395,9 @@ Next: <a href="#Concept-Index" accesskey="n" rel="next">Concept Index</a>, Previ
<tr><td></td><td class="printindex-index-entry"><a href="#index-delete_002dchar-_0028C_002dd_0029"><code>delete-char (C-d)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
<tr><td></td><td class="printindex-index-entry"><a href="#index-delete_002dchar_002dor_002dlist-_0028_0029"><code>delete-char-or-list ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Completion">Commands For Completion</a></td></tr>
<tr><td></td><td class="printindex-index-entry"><a href="#index-delete_002dhorizontal_002dspace-_0028_0029"><code>delete-horizontal-space ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
<tr><td></td><td class="printindex-index-entry"><a href="#index-digit_002dargument-_0028M_002d0_002c-M_002d1_002c-_2026-M_002d_002d_0029"><code>digit-argument (<kbd class="kbd">M-0</kbd>, <kbd class="kbd">M-1</kbd>, &hellip; <kbd class="kbd">M--</kbd>)</code></a></td><td class="printindex-index-section"><a href="#Numeric-Arguments">Numeric Arguments</a></td></tr>
<tr><td></td><td class="printindex-index-entry"><a href="#index-digit_002dargument-_0028M_002d0_002c-M_002d1_002c-_002e_002e_002e-M_002d_002d_0029"><code>digit-argument (<kbd class="kbd">M-0</kbd>, <kbd class="kbd">M-1</kbd>, &hellip; <kbd class="kbd">M--</kbd>)</code></a></td><td class="printindex-index-section"><a href="#Numeric-Arguments">Numeric Arguments</a></td></tr>
<tr><td></td><td class="printindex-index-entry"><a href="#index-display_002dshell_002dversion-_0028C_002dx-C_002dv_0029"><code>display-shell-version (C-x C-v)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
<tr><td></td><td class="printindex-index-entry"><a href="#index-do_002dlowercase_002dversion-_0028M_002dA_002c-M_002dB_002c-M_002dx_002c-_2026_0029"><code>do-lowercase-version (M-A, M-B, M-<var class="var">x</var>, &hellip;)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
<tr><td></td><td class="printindex-index-entry"><a href="#index-do_002dlowercase_002dversion-_0028M_002dA_002c-M_002dB_002c-M_002dx_002c-_002e_002e_002e_0029"><code>do-lowercase-version (M-A, M-B, M-<var class="var">x</var>, &hellip;)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
<tr><td></td><td class="printindex-index-entry"><a href="#index-downcase_002dword-_0028M_002dl_0029"><code>downcase-word (M-l)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
<tr><td></td><td class="printindex-index-entry"><a href="#index-dump_002dfunctions-_0028_0029"><code>dump-functions ()</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
<tr><td></td><td class="printindex-index-entry"><a href="#index-dump_002dmacros-_0028_0029"><code>dump-macros ()</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
@@ -17471,7 +17482,7 @@ Next: <a href="#Concept-Index" accesskey="n" rel="next">Concept Index</a>, Previ
<tr><td></td><td class="printindex-index-entry"><a href="#index-revert_002dline-_0028M_002dr_0029"><code>revert-line (M-r)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
<tr><td colspan="3"><hr></td></tr>
<tr><th id="Function-Index_fn_letter-S">S</th></tr>
<tr><td></td><td class="printindex-index-entry"><a href="#index-self_002dinsert-_0028a_002c-b_002c-A_002c-1_002c-_0021_002c-_2026_0029"><code>self-insert (a, b, A, 1, !, &hellip;)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
<tr><td></td><td class="printindex-index-entry"><a href="#index-self_002dinsert-_0028a_002c-b_002c-A_002c-1_002c-_0021_002c-_002e_002e_002e_0029"><code>self-insert (a, b, A, 1, !, &hellip;)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Text">Commands For Text</a></td></tr>
<tr><td></td><td class="printindex-index-entry"><a href="#index-set_002dmark-_0028C_002d_0040_0029"><code>set-mark (C-@)</code></a></td><td class="printindex-index-section"><a href="#Miscellaneous-Commands">Miscellaneous Commands</a></td></tr>
<tr><td></td><td class="printindex-index-entry"><a href="#index-shell_002dbackward_002dkill_002dword-_0028_0029"><code>shell-backward-kill-word ()</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Killing">Commands For Killing</a></td></tr>
<tr><td></td><td class="printindex-index-entry"><a href="#index-shell_002dbackward_002dword-_0028M_002dC_002db_0029"><code>shell-backward-word (M-C-b)</code></a></td><td class="printindex-index-section"><a href="#Commands-For-Moving">Commands For Moving</a></td></tr>
@@ -17602,7 +17613,7 @@ Previous: <a href="#Function-Index" accesskey="p" rel="prev">Function Index</a>,
<a class="summary-letter-printindex" href="#Concept-Index_cp_letter-Y"><b>Y</b></a>
&nbsp;
</td></tr></table>
<table class="cp-entries-printindex" border="0">
<table class="cp-entries-printindex">
<tr><td></td><th class="entries-header-printindex">Index Entry</th><th class="sections-header-printindex">Section</th></tr>
<tr><td colspan="3"><hr></td></tr>
<tr><th id="Concept-Index_cp_letter-A">A</th></tr>
+150 -142
View File
@@ -1,10 +1,10 @@
This is bashref.info, produced by makeinfo version 7.1 from
This is bashref.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, 7 April 2025).
Bash shell (version 5.3, 18 May 2025).
This is Edition 5.3, last updated 7 April 2025, of The GNU Bash
This is Edition 5.3, last updated 18 May 2025, of The GNU Bash
Reference Manual, for Bash, Version 5.3.
Copyright © 1988-2025 Free Software Foundation, Inc.
@@ -27,10 +27,10 @@ Bash Features
*************
This text is a brief description of the features that are present in the
Bash shell (version 5.3, 7 April 2025). The Bash home page is
Bash shell (version 5.3, 18 May 2025). The Bash home page is
<http://www.gnu.org/software/bash/>.
This is Edition 5.3, last updated 7 April 2025, of The GNU Bash
This is Edition 5.3, last updated 18 May 2025, of The GNU Bash
Reference Manual, for Bash, Version 5.3.
Bash contains features that appear in other popular shells, and some
@@ -7991,14 +7991,23 @@ startup files.
75. Bash removes an exited background process's status from the list
of such statuses after the wait builtin returns it.
There is other POSIX behavior that Bash does not implement by default
even when in POSIX mode. Specifically:
There is additional POSIX behavior that Bash does not implement by
default even when in POSIX mode. Specifically:
1. The fc builtin checks $EDITOR as a program to edit history
1. POSIX requires that word splitting be byte-oriented. That is, each
_byte_ in the value of IFS potentially splits a word, even if
that byte is part of a multibyte character in IFS or part of
multibyte character in the word. Bash allows multibyte characters
in the value of IFS, treating a valid multibyte character as a
single delimiter, and will not split a valid multibyte character
even if one of the bytes composing that character appears in IFS.
This is POSIX interpretation 1560, further modified by issue 1924.
2. The fc builtin checks $EDITOR as a program to edit history
entries if FCEDIT is unset, rather than defaulting directly to
ed. fc uses ed if EDITOR is unset.
2. As noted above, Bash requires the xpg_echo option to be enabled
3. As noted above, Bash requires the xpg_echo option to be enabled
for the echo builtin to be fully conformant.
Bash can be configured to be POSIX-conformant by default, by
@@ -13601,141 +13610,140 @@ D.5 Concept Index
* yanking text: Readline Killing Commands.
(line 6)

Tag Table:
Node: Top896
Node: Introduction2832
Node: What is Bash?3048
Node: What is a shell?4184
Node: Definitions6797
Node: Basic Shell Features10127
Node: Shell Syntax11354
Node: Shell Operation12384
Node: Quoting13678
Node: Escape Character15019
Node: Single Quotes15557
Node: Double Quotes15909
Node: ANSI-C Quoting17257
Node: Locale Translation18654
Node: Creating Internationalized Scripts20060
Node: Comments24261
Node: Shell Commands25031
Node: Reserved Words25973
Node: Simple Commands26841
Node: Pipelines27506
Node: Lists30765
Node: Compound Commands32640
Node: Looping Constructs33652
Node: Conditional Constructs36204
Node: Command Grouping51277
Node: Coprocesses52772
Node: GNU Parallel55461
Node: Shell Functions56382
Node: Shell Parameters64833
Node: Positional Parameters69737
Node: Special Parameters70830
Node: Shell Expansions74294
Node: Brace Expansion76486
Node: Tilde Expansion79825
Node: Shell Parameter Expansion82783
Node: Command Substitution103429
Node: Arithmetic Expansion106961
Node: Process Substitution108140
Node: Word Splitting109251
Node: Filename Expansion111698
Node: Pattern Matching114925
Node: Quote Removal120651
Node: Redirections120958
Node: Executing Commands131224
Node: Simple Command Expansion131894
Node: Command Search and Execution134005
Node: Command Execution Environment136452
Node: Environment139903
Node: Exit Status141809
Node: Signals143870
Node: Shell Scripts148802
Node: Shell Builtin Commands152103
Node: Bourne Shell Builtins154217
Node: Bash Builtins180867
Node: Modifying Shell Behavior217794
Node: The Set Builtin218139
Node: The Shopt Builtin230136
Node: Special Builtins247191
Node: Shell Variables248183
Node: Bourne Shell Variables248620
Node: Bash Variables251131
Node: Bash Features290258
Node: Invoking Bash291275
Node: Bash Startup Files297862
Node: Interactive Shells303107
Node: What is an Interactive Shell?303518
Node: Is this Shell Interactive?304183
Node: Interactive Shell Behavior305010
Node: Bash Conditional Expressions308774
Node: Shell Arithmetic314194
Node: Aliases317526
Node: Arrays320663
Node: The Directory Stack328254
Node: Directory Stack Builtins329054
Node: Controlling the Prompt333502
Node: The Restricted Shell336390
Node: Bash POSIX Mode339275
Node: Shell Compatibility Mode357635
Node: Job Control366645
Node: Job Control Basics367105
Node: Job Control Builtins373476
Node: Job Control Variables380161
Node: Command Line Editing381395
Node: Introduction and Notation383101
Node: Readline Interaction385456
Node: Readline Bare Essentials386647
Node: Readline Movement Commands388458
Node: Readline Killing Commands389457
Node: Readline Arguments391483
Node: Searching392543
Node: Readline Init File394789
Node: Readline Init File Syntax396095
Node: Conditional Init Constructs422923
Node: Sample Init File427311
Node: Bindable Readline Commands430434
Node: Commands For Moving431975
Node: Commands For History434442
Node: Commands For Text439835
Node: Commands For Killing443963
Node: Numeric Arguments446754
Node: Commands For Completion447909
Node: Keyboard Macros453608
Node: Miscellaneous Commands454312
Node: Readline vi Mode460882
Node: Programmable Completion461862
Node: Programmable Completion Builtins470602
Node: A Programmable Completion Example482342
Node: Using History Interactively487690
Node: Bash History Facilities488374
Node: Bash History Builtins492112
Node: History Interaction498586
Node: Event Designators503539
Node: Word Designators505120
Node: Modifiers507515
Node: Installing Bash509455
Node: Basic Installation510574
Node: Compilers and Options514453
Node: Compiling For Multiple Architectures515206
Node: Installation Names516962
Node: Specifying the System Type519199
Node: Sharing Defaults519948
Node: Operation Controls520665
Node: Optional Features521687
Node: Reporting Bugs534070
Node: Major Differences From The Bourne Shell535430
Node: GNU Free Documentation License556859
Node: Indexes582039
Node: Builtin Index582493
Node: Reserved Word Index589594
Node: Variable Index592042
Node: Function Index609458
Node: Concept Index623456
Node: Top894
Node: Introduction2828
Node: What is Bash?3044
Node: What is a shell?4180
Node: Definitions6793
Node: Basic Shell Features10123
Node: Shell Syntax11350
Node: Shell Operation12380
Node: Quoting13674
Node: Escape Character15015
Node: Single Quotes15553
Node: Double Quotes15905
Node: ANSI-C Quoting17253
Node: Locale Translation18650
Node: Creating Internationalized Scripts20056
Node: Comments24257
Node: Shell Commands25027
Node: Reserved Words25969
Node: Simple Commands26837
Node: Pipelines27502
Node: Lists30761
Node: Compound Commands32636
Node: Looping Constructs33648
Node: Conditional Constructs36200
Node: Command Grouping51273
Node: Coprocesses52768
Node: GNU Parallel55457
Node: Shell Functions56378
Node: Shell Parameters64829
Node: Positional Parameters69733
Node: Special Parameters70826
Node: Shell Expansions74290
Node: Brace Expansion76482
Node: Tilde Expansion79821
Node: Shell Parameter Expansion82779
Node: Command Substitution103425
Node: Arithmetic Expansion106957
Node: Process Substitution108136
Node: Word Splitting109247
Node: Filename Expansion111694
Node: Pattern Matching114921
Node: Quote Removal120647
Node: Redirections120954
Node: Executing Commands131220
Node: Simple Command Expansion131890
Node: Command Search and Execution134001
Node: Command Execution Environment136448
Node: Environment139899
Node: Exit Status141805
Node: Signals143866
Node: Shell Scripts148798
Node: Shell Builtin Commands152099
Node: Bourne Shell Builtins154213
Node: Bash Builtins180863
Node: Modifying Shell Behavior217790
Node: The Set Builtin218135
Node: The Shopt Builtin230132
Node: Special Builtins247187
Node: Shell Variables248179
Node: Bourne Shell Variables248616
Node: Bash Variables251127
Node: Bash Features290254
Node: Invoking Bash291271
Node: Bash Startup Files297858
Node: Interactive Shells303103
Node: What is an Interactive Shell?303514
Node: Is this Shell Interactive?304179
Node: Interactive Shell Behavior305006
Node: Bash Conditional Expressions308770
Node: Shell Arithmetic314190
Node: Aliases317522
Node: Arrays320659
Node: The Directory Stack328250
Node: Directory Stack Builtins329050
Node: Controlling the Prompt333498
Node: The Restricted Shell336386
Node: Bash POSIX Mode339271
Node: Shell Compatibility Mode358220
Node: Job Control367230
Node: Job Control Basics367690
Node: Job Control Builtins374061
Node: Job Control Variables380746
Node: Command Line Editing381980
Node: Introduction and Notation383686
Node: Readline Interaction386041
Node: Readline Bare Essentials387232
Node: Readline Movement Commands389043
Node: Readline Killing Commands390042
Node: Readline Arguments392068
Node: Searching393128
Node: Readline Init File395374
Node: Readline Init File Syntax396680
Node: Conditional Init Constructs423508
Node: Sample Init File427896
Node: Bindable Readline Commands431019
Node: Commands For Moving432560
Node: Commands For History435027
Node: Commands For Text440420
Node: Commands For Killing444548
Node: Numeric Arguments447339
Node: Commands For Completion448494
Node: Keyboard Macros454193
Node: Miscellaneous Commands454897
Node: Readline vi Mode461467
Node: Programmable Completion462447
Node: Programmable Completion Builtins471187
Node: A Programmable Completion Example482927
Node: Using History Interactively488275
Node: Bash History Facilities488959
Node: Bash History Builtins492697
Node: History Interaction499171
Node: Event Designators504124
Node: Word Designators505705
Node: Modifiers508100
Node: Installing Bash510040
Node: Basic Installation511159
Node: Compilers and Options515038
Node: Compiling For Multiple Architectures515791
Node: Installation Names517547
Node: Specifying the System Type519784
Node: Sharing Defaults520533
Node: Operation Controls521250
Node: Optional Features522272
Node: Reporting Bugs534655
Node: Major Differences From The Bourne Shell536015
Node: GNU Free Documentation License557444
Node: Indexes582624
Node: Builtin Index583078
Node: Reserved Word Index590179
Node: Variable Index592627
Node: Function Index610043
Node: Concept Index624041

End Tag Table
+16 -16
View File
@@ -1,11 +1,11 @@
This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2024/MacPorts 2024.70613_1) (preloaded format=pdfetex 2024.4.9) 22 APR 2025 10:00
This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2024/MacPorts 2024.70613_1) (preloaded format=pdfetex 2024.4.9) 30 MAY 2025 08:52
entering extended mode
restricted \write18 enabled.
file:line:error style messages enabled.
%&-line parsing enabled.
**\input /usr/local/src/bash/bash-20250418/doc/bashref.texi
(/usr/local/src/bash/bash-20250418/doc/bashref.texi
(/usr/local/src/bash/bash-20250418/doc/texinfo.tex
**\input /usr/local/src/bash/bash-20250529/doc/bashref.texi
(/usr/local/src/bash/bash-20250529/doc/bashref.texi
(/usr/local/src/bash/bash-20250529/doc/texinfo.tex
Loading texinfo [version 2015-11-22.14]:
\outerhsize=\dimen16
\outervsize=\dimen17
@@ -161,15 +161,15 @@ This is `epsf.tex' v2.7.4 <14 February 2011>
texinfo.tex: doing @include of version.texi
(/usr/local/src/bash/bash-20250418/doc/version.texi) [1{/opt/local/var/db/texmf
(/usr/local/src/bash/bash-20250529/doc/version.texi) [1{/opt/local/var/db/texmf
/fonts/map/pdftex/updmap/pdftex.map}] [2]
(/usr/local/build/bash/bash-20250418/doc/bashref.toc [-1] [-2] [-3]) [-4]
(/usr/local/build/bash/bash-20250418/doc/bashref.toc)
(/usr/local/build/bash/bash-20250418/doc/bashref.toc) Chapter 1
(/usr/local/build/bash/bash-20250529/doc/bashref.toc [-1] [-2] [-3]) [-4]
(/usr/local/build/bash/bash-20250529/doc/bashref.toc)
(/usr/local/build/bash/bash-20250529/doc/bashref.toc) Chapter 1
\openout0 = `bashref.toc'.
(/usr/local/build/bash/bash-20250418/doc/bashref.aux)
(/usr/local/build/bash/bash-20250529/doc/bashref.aux)
\openout1 = `bashref.aux'.
[1] Chapter 2 [2]
@@ -264,7 +264,7 @@ Chapter 7 [124] [125] [126] [127] [128]
texinfo.tex: doing @include of rluser.texi
(/usr/local/src/bash/bash-20250418/lib/readline/doc/rluser.texi Chapter 8
(/usr/local/src/bash/bash-20250529/lib/readline/doc/rluser.texi Chapter 8
[129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
Underfull \hbox (badness 7540) in paragraph at lines 964--970
[]@textrm In the ex-am-ple above, @textttsl C-u[] @textrm is bound to the func
@@ -313,10 +313,10 @@ gnored[]
texinfo.tex: doing @include of hsuser.texi
(/usr/local/src/bash/bash-20250418/lib/readline/doc/hsuser.texi Chapter 9
(/usr/local/src/bash/bash-20250529/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 10677--10686
Underfull \hbox (badness 10000) in paragraph at lines 10695--10704
[]@textrm All of the fol-low-ing op-tions ex-cept for `@texttt alt-array-implem
entation[]@textrm '[],
@@ -329,7 +329,7 @@ entation[]@textrm '[],
.etc.
Underfull \hbox (badness 10000) in paragraph at lines 10677--10686
Underfull \hbox (badness 10000) in paragraph at lines 10695--10704
@textrm `@texttt disabled-builtins[]@textrm '[], `@texttt direxpand-default[]@t
extrm '[], `@texttt strict-posix-default[]@textrm '[], and
@@ -346,13 +346,13 @@ extrm '[], `@texttt strict-posix-default[]@textrm '[], and
texinfo.tex: doing @include of fdl.texi
(/usr/local/src/bash/bash-20250418/doc/fdl.texi [192] [193] [194] [195]
(/usr/local/src/bash/bash-20250529/doc/fdl.texi [192] [193] [194] [195]
[196] [197] [198]) Appendix D [199] [200] [201] [202] [203] [204] [205]
[206] [207] [208] )
Here is how much of TeX's memory you used:
4116 strings out of 495840
47662 string characters out of 6171739
145156 words of memory out of 5000000
145154 words of memory out of 5000000
5048 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
@@ -373,7 +373,7 @@ fonts/type1/public/amsfonts/cm/cmti10.pfb></opt/local/share/texmf-texlive/fonts
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 (214 pages, 855036 bytes).
Output written on bashref.pdf (214 pages, 855783 bytes).
PDF statistics:
2948 PDF objects out of 2984 (max. 8388607)
2686 compressed objects within 27 object streams
BIN
View File
Binary file not shown.
+339 -319
View File
@@ -1,7 +1,7 @@
%!PS-Adobe-2.0
%%Creator: dvips(k) 2024.1 (TeX Live 2024) Copyright 2024 Radical Eye Software
%%Title: bashref.dvi
%%CreationDate: Tue Apr 22 14:00:28 2025
%%CreationDate: Fri May 30 12:52:48 2025
%%Pages: 214
%%PageOrder: Ascend
%%BoundingBox: 0 0 612 792
@@ -10,10 +10,9 @@
%%DocumentPaperSizes: Letter
%%EndComments
%DVIPSWebPage: (www.radicaleye.com)
%DVIPSCommandLine: dvips -D 600 -t letter -o bashref.ps
%+ /usr/local/src/bash/bash-20250418/doc/bashref.dvi
%DVIPSCommandLine: dvips -D 600 -t letter -o bashref.ps bashref.dvi
%DVIPSParameters: dpi=600
%DVIPSSource: TeX output 2025.04.22:1000
%DVIPSSource: TeX output 2025.05.30:0852
%%BeginProcSet: tex.pro 0 0
%!
/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
@@ -4954,6 +4953,7 @@ dup 41 /parenright put
dup 45 /hyphen put
dup 51 /three put
dup 97 /a put
dup 98 /b put
dup 99 /c put
dup 100 /d put
dup 101 /e put
@@ -5196,135 +5196,141 @@ ACA503B3C565FE949A30F08F9A68541FC740549496AA70885C19FB751B46C797
2BDAE3C044E0BBD0FFCFB0E6676B8A06318ECE80777A5FA5A137CC043FA0E17B
8BA4E8C5DCD5854EE5775355100225D52D719BBE3AE2BBAEE2A9EBFC1E6DDB44
30B4DC186F26DA75731DF0BB2232903645900B351A1A40EF09E80E4D602E3F3B
91708A66B4DBCFCDF9F739947A34AC5BB67EA974A305C7F95DE2C331D8E5AC2E
029BD620DFFCD216CFF05B10E68262D58DED07D9CB5CD73C20778E3BB1B1EDE4
A4538AA03CB7778E19B89AF3F34438F882105DE368C1B5AEF6667CF77ADB94EF
D54E166110F8242A64117AB9A9B78E11437F0CC332865D268FC5F5259CA6BAB5
116C169C72CA1390D264B6694721F6C4E11E7FBA3E71EBF9DB0CAA0E47293153
A02729F77ABFD98C8BEFF6C29C0C1471033978A1FB867F3BF22158B0A4781426
8AC4F157E5AEA63F8D164D6654360577CD9860282B379FBAAE27F07039161ED7
F8B99311C72B2A02189A447CED8191932F70BBB78D805847EC77F3C43CF58CC4
EAE0E7219426BF23819E0DE5912486D77B8B7D585E6A50AA5762197C8E2C4EB4
3A2B1A34E8C0F5AED32DA5FE92952FFAABFB29742C18470AF7046292E11154F0
7F9EE5622DE1C04A60B8D0C2257EE8D06CA3E4D0D6CC2B6CEE18B4F5BB2E7299
A939892DD8DF1366FEF6258390F3E7563A3A4AB54F9910A4A317DE96DE0CC1D1
59E087517210E5012256A56EFD75CBB351B9F3CEFCC5EB693BD3F265490AE809
C81D375B49279900C5EA3804B495216F8905D3C430979032230C39106F8FBC7A
F7FE5AC195AA3F37EB736B5F9895A6C7494A19F53325FFB31C154CF78879D336
BFB1718799B2A1E0717833548403E3F4A96023F9FD06B5728A1EEF86FCE5345F
13ECCC04A6F06A2195446121C45F4A5CC66796924A6EF8429327CB9BC3289F13
71FC30E1DC10D7BF6DE0A9E4135FA3D86B1FA416DA5277F678E72B7DEAE1E7A8
83B615B9DFA92F8C86B98A36413A9A83F859B06BFD57A239745598EBBC91FA11
5A7738F46DE08A31A286474EFF96552B4F2B9552C806CE2988879B2B707063CB
F4285218597CA39A00A3432B784F8EE45AF5507C667E1641374E225B71F2BE34
69F1DE6B8357A78646D38C4E2430011501FA6C4791BAAF24A240A8C765DFCF4E
EF8F3FF7B892F0070FAF734DB0BE2F0122DE5C1EBB2554C4AFF49BDEB6CE9A55
E0F246D29A8001F5704C04FF41D7439D628AB4D968938A4C094FEBF4EEBAE758
0D7E247AA9D7598BAEBF182DB178BD90520E80748C35F30339BC6BE01F40473D
7070138BEB5587F0536F517BFB4B35A0341E803D7E38500308E3DCBB1F0B107B
B7C9D890BC079A1F7727DA51CFF0E36D2F93CC990E2A5354CEEEDD1C43A4D760
80E97B13E562EE347252E72829FBDE9EF644171C02F9394EF0DFAAECE1BC9A59
D0388A70048AB2AA8C2694391FF2BB9E764BC220A77970E324345255E2D47540
BCC6903E2D87A75C6848FEF763D5794D29D7BB362890D591AAD1B210D5A3198D
455A4CD565C3A85E88525FB2F2E340ED2AD15A5569C54DFA9A889D2790C1E4BC
984690ADEF12C1C57A999D08B85BE2AA554E20B48172FB3FDCF127E4CEF6283C
77EBB27AA14449610CA704337A9427AF3EEB863707009A51A1AA9E3DD0ED6C1A
B0579A4CB74F0BB962FA97EA4C3599FA782C9714237C1A04665BB5C6FF544208
D7AF307383667A7AA3EC2D5B349B5ED7C7F37CA5FBD5B0171A95D7A9A3D973AE
F8632214A31264888AF7292B81E19AC2846E0C79131C40B391B0A785E2CCE197
524117179B44B9E8B633C1D3F19F1B3523CFC02DD5F1E9806BEF62491140A59B
2052BEC84B496869EACB84AC9CA6A854D5E701186FB15BA016B33F9681F5A5FC
2AE141291D02383433C57C205F526D3CD4FEB5D99B2FBCB609ED85B474BA8F69
C45A1BA96B5AECBE7EC1EBCF265F400DAE943CFCCA785907050CFA6A23CD4C5E
B6DC2C793BE8D8ACD85BF83AC662205BF76981DD864E58F66212A4F8A650AB7E
244444786D75D1821283C544804F8FE5EA300E3DDF832056A916DD9FBEF04E68
339C66FF5054D30C094FC5498AAC3E170701C382322DF543EC3D98A11FC3225B
158694570C4FE19CDF592F5F3A111B63615AB2DA3E932CCA1EA02373B01D6398
E6AAD8FEB3C9F62CC29CB6CA30CEF112C1D004D21A28DD03952D5188F5C39203
BC5EB7E6BBD07B30B12233964860C7302493DF286F87C9AD8C8DA34582AAB342
E726C5EE08AEE84BBE57C3C3D0465DA3ED81F506337B152E97F303093526B26E
4D52B0C43CE276B4F06E8E8601FD18496B166303CFF419B9B5DC200F691F1955
9C2CF202F41BF2295E1738F5C7ACD434CF628BBE043BFE2ECCB5DE2D71BDE932
0162EA7DB842017FB1F428F91ABC693A1182DD1ED09AF938F5934F5CA36C001A
810815A152A96091B27E49FDE87BD97F019804D1FCCE1793700AC0762FFB3FD4
14245E87888B54D2FB91AE501B0A998732321A9A275265A7AF196CB0BBE2A9A9
27DA00C9282EB875B7D508ADD444261C799B558F764143BC780C8F6C74EA7FF9
8C2CCA95D9E5AC225843019E3DDCAF3555381F3F7A46A49731EBEA3D3BCE7C29
C5D86EDE26FDC34E9DF04266B9FEC79CE387493FA40AB4762178686659D210BB
30215702BFEC9EF027916978583A76617EB180B8D6C866257F9C14B80D7C0254
A5B1BD9FF2096AEA41031DC702911A40A06092EDCCFF150DC756A893E19AF583
832E7B0ED88996692783C11CE1CD5BB3268BA0579BE0E003CE53B0E719B5BB2F
AE87DE65AE8064AFB8F4EE72F16F4A567AB2EBF3002DABC0C3D56BE7BA073860
6B583385F8478868364A85BD9A89ED52693E4E03188872917A2219A89599F867
F7585E713CAC55F4D523662891745D8172CE06910AEAD92C0A9489ABD51DBB8F
C5FC9DE83FF69505C1F09A8598FAF1BFD3FFFAB05A537C6E651EAC117E0F3FFE
6EE53778C2017582250FA25B381300766CCF1EBFA5B210549FC243EE32FD1381
FDC1070B7BD459C025C6B591032CE422BE8B6B411A0380175DC101C3859B315E
47ABA9A68AC52CABD3711AF236E3B67BAC6BDB07666F563441CAEC10C2B12196
6B687C34F8FCC9C061B6B19792F3F2CE72E4AF6C8070709C9CC9DD8B8CBE9980
79FDC3D6391F35022B3E1EC0B298DC2409842B39386DBAB07F7DB4F28A40F3D7
FAF6C7E39C16E88AAFCE8F5958F7D3E2E866FE990BEE541983253F6A447919B1
F88600D21A55E25EE7DAA7CBF0E9E632C1553BF1C220220DBA1132995D39796E
548448C9940F18CD41D4153AB742BC6E5A200D70B12D2C91CDDB60AB2D949FD7
05D9F51500E5D8FA6A3BC706FD66404EE565EEBD6192F1BC784E47E55312B4DA
531121687D60CBB1985285E73A7CF3A629A104EEB54F4DFBB6BF9C326D1ABAC9
FFFD8142F10E17F9C4407589507E47CA36ECCC4DDB2A8C3CB1EB57AFEE28E2D8
809CB435BB888BAE35BAFD16B3764F6922E5A4DA6723CEB52AAC2951F0C3DD54
A25D55C9830728F471170004020471DD7316BCE6E5293DD716CA55F05693013B
EAA64EF3814069A5B125FE134ABE80B54644DC89BF0058C0039EAEEA998D817D
315AB5A6A28F31472D169FA2AD749BD153B45B81EBC0C92964415FCB8B8D1AFD
245EBFDE89121D366C8DF5322F7090D0360F680D029C3C05987B066CEEBC3B21
5558632CB4E826AC1E70862B7FADD4F0AA9DE4FBE517D3D0C8BABA83FDEBB01B
B37CA493E4A21A758234157A94BFFD9AB867840FFC638EDAF4B8B36476593C8E
A7E81C53DEC2832621165C53029DE5066813F0AEDF98BC881B45986CDDD7158A
24F245A6E71EFB7075790A3AE298953EBEC4AE166F66E8C33FF7ACE0D20575B2
5910A6716280EA62F0C7BD75987F620CEFD9855084FB287BC944E0DF7CFCAB1E
184106282A5083E42313EB5BBFA6DB134F07CAE3273D9B6288AEECF43A4337F3
7CF6D2A6B93FEB3281F4001585728CC11A076C5BE40C2E9D24303ABF65475DBD
F2B7089743EF0E70670FE9BED3550794945ED5C1370BD4BF7A576E24F7A7B8B5
9590224F96CFA37B11E82BC3C0F204AD60AB2D3E72EDFA23197BF91D9985645E
B7F7EE572AA35A5773A612880B5504789EB184550B3575F3C45B9E9D3C945940
BC05F5829254CBF087EFE06ECD5C68BA41D79A4EB5B0596825157FAF7B16A723
50459059531503BAFADCB2AFBEC4D0DFD2129E2654255AF136AB5758C88AB51D
6BA6CE751AEC740EF8A5C738B22038156D12EE80D9CCD34D87E4863784B399F7
B97BE7794B6B16F3468EB810B1E562E9D09E05F6D03982C4455ACC4138415358
C41EFA7647D8803B582F190A818FDD67B5C65129B99A630F615DD92A73EB5B68
2683C9E42CEE118A9C642D7B00B7238791AA5972751248C32959589300C2AF60
A777CCA09D66FA49C38BEBC5A233814B006CC15BF71C12305BE9B1E81429884C
D3193BB1C07E9CAE0E73F220C4C5EC3E869E9B7F12FC85B998F7FB2513224868
082EDD4977F37690D36E791D5685D46F6A5128B57056B2F5D9BDC29AFEA659AA
FAD00B44FB5BFC84F0D2DE276A4D53AE32A85D051D4FF7071BAF8473EE2767CB
54603F343268BD752FD0F59720B62A3A49D3B89CFE75DC777A51AF18AC918BB7
4B30884FF61AF01C417AADEA4AD4F14327FA3C14486BB5D1BC07DB7443B04D9D
E20A5ACA8531B476A92DE84D02C1BF2E90EEA55B678E07CED5AAA14EFAD83042
4172743746A4963F82625635F69F280DF086DE28B0F4FF205A530506556C9416
3FD225BA22B9B6EA745A28C05B2CE086713E3964DA2A5A4D8A860F0694DFC7B7
58DEEC11BA5AABBAAE516721F3CDEDAA0EC320E543FF7BDFF5C5F7E1800ED7E0
0E686EDEF974ADD0D84AC93936C1590C0C900B16309DC6CD11FF29F7A18256FA
658351FF63F8ECEDF1A08ACC907723574A69757910C123480D37798124B644C0
A209AA45D6C2AF87FD66948FF924AAD4332864B563CBB49DDC47371F386D2005
63C512685F38BD1613D45DE23F3B16F861FDB39BE984E76657DC2F7315BAAA32
1F48A9E6E880D6DCCACCF3503324F9F10E672695C487A5F02C11059EB3D65945
76660D7CD1892564904EA92E040CC6418C1C8C207983849E374583C32ABBD886
0B41A147DD2CDB5E97128A7E8351A5583BADC4A1DA271AF38D2C09C2E78CD172
808672645B0B197694125C1B8D010D0675CBBC1A399A4D6DC768E773CF0CE2F4
0C922B8384813E5602DA73518CDD721114938E290AC48E50ED3B4E109C607A42
18FF245B7AA243593F01A41E8FE317ED997C16BE35A3A802EF57929C82B9637D
2B694013286C22A4052940C4816AB2C203F5726E6286E235FDF28DA8A058B024
B78945E8A38FD5B82DB71C2BA3D61CE8512F554F901E828A753873D7D35ED923
79A4738CAE8113297E53E4665906A1EF4D1653DBAFC95F5B619C783E42FFD95A
B38B4A5C4235B4B769759B8BA80B05999091D1B48D401762E2CE3DAA631DB555
1FEF72484E29C7DFB767811A49B23231466FC826BCBAE39ADACDAE8FF665F33C
E8707685B4C46CEAE91CFB897D6C4982A0F73BA0CF85D4966484BE20E43F1F2C
706C5E466247F343833A0FF9877C812C6C06B2B7076E282BD20EA0819345867E
AB2C71D97347BA071834F9539D2F7561A7281A6B6F91A6A5AB576041553716E1
0DF8F5F400F9DD06F13894181B58200AB282161FF91C82DA04761435B141BE4E
22E9DA50EA6B37E534397B0A66ED598196BAF64EB579C7BB08AC795DE403C01A
9BBEF136818330E2700389E8CF5D8734CA7642DBED662EB43F99F0E91C983CA2
1BDEE4F01680A833C87A1B1BBC9FCF2111D9835F1993F2FB5EDFA2D30131FC8E
0780CC8FC83E52B9FCC8454C7E95C3E45AD18C196E302341ED6A49D84D595852
CE841193E319A2D566BA1781242E2A6B3A09EB62EEB76956FD61BC7EB31F76F3
CBDC3AE9837AB34F5FA6
91708A66B4DBCFCC2A6B3C3FEDA18C851EEDB91B757FB44909E3DF1BB06DDFE7
30B193FB0D3D09F8B11E7B417B00555E2413A2572E67AA9B48C859A4FA50B834
CFB8512BD5E9D13DD1132F6704EC4ECE2A132C3AE447A5F332E60928ADA72B63
9846383F731E0F6D8B5458ED73FCB6EA6615E2379E6AB895CADB47F4595A502D
45D99ED65A2909B95468CEF6DA0393F644D5CBFB34C7642F7B42A38ED34DAED1
97C0DC8F2556AFD0956F35C26FD1413849912627AD230A6DF64A657B8EACA61C
E01E0FC10E680D1213CBB756CD85D67343E6C89CA30981C6B31AC0BB3CF76D73
3EA83F472E0FBAC18DA0968BB15942BB25984BCBF99592996F4B896AB6077E37
432C9DACD78769827CF159E0BFD7E792E9A623D05DD7F2983F157A4E0D3C61C8
44FD2EE38965EDFA7909CE809C8FAC231541015D692C17D65E4A5AADD889C7DB
27083128B78310B37180A83E85ED7E12A6E278C4C61BE3F2CE7C6BEE827E8837
15212BC5779B4F1D7A09A89573452F59194EAB6374A8D887167903A4535D3E86
4C0A6D3E3168E65F67AB2CB8D4DB1A7456461E9D6A52B752D5A4C6C1C14DC410
6D3919AF616F2EB4036B48D7863F77154BC028A70037514E283E1A448404DCCA
C03F4DB671066CDA6414204F54AA899ECE4676D8992943A108E1A1040173FDFA
C22739B5E42C6B6230E81DB55BACEC7D7A77BEE1450EB4E76BD6ABA0517B924B
9B4F65BAB4EA17AFBFF9FC99F504DDA47A3EF836804D2A8DB02250ECC1F185F1
273983C49340AEA983D1862E9920D8A19046DF30B03F204A65CA971A702FA790
7A1207A59D57886D7F7BAD9B5763DDF0CBD9C26291F1310E4C7ADC388B0EEB8C
494F56E4ABD1E273AB1550D234989F106D85DEA26E8572B712FC1E47A7F941E1
81FD663E667EF64A3B6E780F22AC9AB166288ACD6B6DE0DDACA8EE96895DE623
F887745E77B6D95410BE1A33A3DECDB646C342DD745876B909DF57C5FF69108F
BB3E04358715700B9D5289B7BF86BA03C96E72C45588BF19FD1BAEC5758C6AFD
CE305899B23F877BE70F91FED87DF410C20F932F72AC437C9AC2C14D48BF79C4
A9CB3E4F95F88B89136AC126EB2245F2760463E10A1439708DBC3C6028EF54B5
F601782C652600DB0EADF179A5CD975CCEBA238CA2F85E1BCE229EC2021F1454
90A6FBC9647E08C2000FCADF613B837969178D44AB0659D9D8B142E216AD612E
7EFEA426317CB26A4C67B5588607B17B65D6145621B7E9AC5E2FB6D82BD706EF
F4BAB2278C3CCCADB21EE033A4C9735452265AADB3682CD57758CD47EB39993C
A722680E13EE1B7E29AF97C168F6428786E1B4C284E3004B3185D5EC1207CE91
6CDB4EC6879519A377237B059DE5B340B2506879C6517D6F36C98392D334FCBA
153F3E580180E6EE253DEC9B46CEF5C4E9287A72C53C6AABE7C5F4F006792854
56CFB32B4FA636D35161B3EB6C40C9B9FCA605851B553877BF0CD9004B0B3C6C
9F76C8688E3E3D8C142A23C9035E77D0F90C198AC39C7C9371F72C1D473A50BF
0DB83C888D6764393CC4C7F28226C29E028F6FD830CE850083BC3A7707E3925D
FDE48920E5C2C228B9A02424AA9DA14E0DB4ED0D43EDCA7EF9A96BCB6354F04A
ED6D35CF7A4F669EC60C99118913C6C3B61F50C35FE2C5808E2C0804EB925FA3
37E2D42990C84B26257AAFE9D9BDE77FF125CE106FA066B9DA902B4D2F0A3844
C5C96C3FBD0191A50BF798B3DF1C2CE05019E0B91CED479216D4518C9237C394
974E35929D8FA50DAE7D8DC9ACD0B93984B7D4E909DD97C2BEF9DFA3575936D4
86E923E95C76F0051CED607A7CA487047474C39DD11E3FA0F23D33FF5CB65C9F
F5225506B4E5435016D4F92E8E853C7985C46201883BCC5F327F70542FBA00CD
7B43C5FD66E1670F2EE9B9316E45D6C3D0DD9AF463F0D460585E2C2AAE4BABE5
C7805F81C8560C092103A63C190F97EBCFB1E2CAE202E09623DAEA9E502845E9
EAEDA60AE08657270F7E31B565D813F81DD9D5EE5FF28D3BDD8E8C988954C591
EF5F86FB2C930CCE57CA447D22DB0F91E5715774DD18FEE6282EA9B9524046CD
9BD32C82096AC7E11E6F975CE8BDAC28ABD40A631D5ADE7B08B5C3ABFE253BAF
C0DCC5CCC95B34149E13559A9ECF503B2EFB1CD3FC971AFC38349E8D4CDB7F92
E0301590C0E28E1CD5998D401332530B749CF239A94E61126A3E58DA153B4636
4761D9A49FFCDB5B76E4A7C9868BA67EED58B0354BDE5F93A97038F6C27E1088
DA3E30A9E958A3A4DB441D3FB14D1BF60201F32A2162E3B4672CE6036322B817
2094A3753326B93E750D5D089ECDBA70EF7BE18A7D923964F0B39C13B474210A
0C801824E702ADAFE8D8460FC48FCA6A9EC26C714796A89AE9E061240BD39106
2B9FDE81DBF2E0D09D5899035E1FB733849598A3767E2DA726890283C0FD8D6D
8895E3613CE13FA4B424D95FA099F9610FBD9963D45D46BB4265E1108EFFD9BC
DCE1E2BCB5C16C0BD12834F70EBD59BAA63115B4F12A24496BF5A4D23FBE89EF
980E94FF241A49EE5625A14D446DDEF0B69A9A7198E360235D953404DFD1EC07
6323392D0E4FE6954B70F32958E8F0C528373102EF2B23FDB7D79AB5A00AD438
3C7847FF35878384B0702B8643F60A516DDFB683E38FED29BC034EE49D3359EB
3983154A0D2995528558463D2EBA4F0DC855284968F305D7E618142C4F2680A2
A7D214AABFE635D1D75536C165A3989C9C03214ED83A6F423983ADFD45959707
383A5BFA058E20A325F09D386EB549E08680333CF43582FD09BD5A30914DA8C2
4FE430810CEAE208A4A1E4599B55E177460457DA4510EBCA4317005FE1641AD8
87E76AAED9299A492AC1757F6FB1ADC2328842E3D68C0FF0D3FCB7E51B4E08F4
AFE461E5A2EFD6AA7D62CF1609BF2CFD37A9807C88E3157722C7991BBA55685B
4C088D18C242E77A92407ED80D4DE389752ED29E50A5D5DDE93C9A4DFDDE5C38
B30584F6255500231A9EB03BBD33645FED004541D095430209A3D43245063387
8141D72DCBB19ACFD298A6D980A34EADA7EACC4CA0650E2260E3F0625510BA50
09A5BFD2B382CDDC68357EF7B3F2232B0ECDFFB5EA68B8DA44EC63FBC709FCC9
254B3CBCD772C1BFB0212E908CF1D1FA4AB9B63FCE36008FD6159B5921303457
D9F1AA25FDE085DF6B5F3F4D27DA8B250A7BF4E9BD067209852A6FD04ED61AB7
2761D72FB3BFBABF5B2C9B4C51472773AE5FA5BA283249196FA4703AE8D2BC93
E9C87378C51AB36D4154A6CBF6D0F04BB60F7A803A5E9DD02ADA9690E7241411
230E9287525B4F5B9BFB3927EFA4A4F17EB849F731E7B9CC557E721485B27D77
7EDED14680FB592C5C214FCC83AC89C3CBADA0AFABA5BE9D7CBC73A1D7590C5B
EB372681E9681738EEB27D812E8F63666002BE8237DF9D1A030D58F479DD3C89
A325970C20C20349D3E243FB0255A66EE53318AEC3963E83E1521B17927BFC8C
104F5052B05B4BF759481B65F2AAA08F53927F28E0E06B160E25224C3FA2AF8C
DA0DA5FBC15502A9E38BEDB9F24C1D4B115EAC9ED9DA490519D206E7E8A5C597
1A9DE22EA133EA9C1DD05EE44932AC4C47EF92B743B99CA49A4D24DD7A9597A2
5E678DB4EEAE812C00D3DFC1660D442BC3956B941D24F3C17D654D21F9CA135E
706180E03058CD04867DF42B27ADC04C84DC4E147E819A82B0144A8539D146CC
229E29FE9FFD1F5144366B7A0357325077E71093C0902C076C16323FE18E34D3
5E38F0F6B8153F6E3729B582616F43EF4BFED11E96604E73A820AAD9B976D673
E4516467BB4C938A04BDEDF19D8366FB89B021310169355C0BE5D0781293E6E2
E46F572EA4F66B1253BE3C2FE7FB30092ED2C5FCED39A97C5039AAD8CB41000D
F33FB894B57EFDB51E4AD8935661D3DF41601552F245712A44D384A7C1BB8209
A24908872CB129B5C56637B548CAF0036EF165FC7CE103204A71FA7354B94589
2547AB84089EA9D4FF4F125DB93FA845E2187B4FBE931DE05CC3ACDE09C5230A
C1C73DCCEBF0AFEB3EF052F267F0F5DF1D66C89C8E93F38212E974B0362A9DDC
47B97961D7285737F2176EBCD70CECA79606859F8B88CEBFB4B4D9250B0F3496
7C9850B6CC2C9C227E0AE5B9CF61BDFB4EFCC07C083CB2631DCAD9B0CDD3469B
F5408972F0052A7D7D7B4C81421F33BCE5D1ACC9F033FEB51CCE6060F611FE4A
0BC396D58ACF04184EC1DCEEB6711C7C6F171B79DE2680C34959275D0E9F8A1A
A1DBF43F1A50B82F631205BEE0DBDC69B7AD74BFB08E3190610CB966D6A689CE
20A1D6D3A8F7A0C8318F309DF47813D6DB98C2B725B0E3E9BA0944C8A961EB9A
BAB3D7B987A5F0FB5DCA7F3CE510EBB9FE7F045C44ED5EA72DE6C5B05E419415
72C5084CF59E83D5BCB203201A43547FBBBADA248255ED86E81333E9814068E5
51316EB120BD7A6B7DB7C907D2A1FDB6EDA22EC0FC863B842BF73134101AE59C
9528AE301BA7E5F03EA3B58E7A3FC7A1207D117EA58EAB0D6855DC88ABE23B95
18F319C307A5EE278A89909BEADED3056E577A1F34D7410B5D827FF1281867DD
5F9D04DD8F24F420CB1F6A52AEC8A52701A5B99A2696BC2827D8F1B0004D380F
93CB984DC5429236B8C4BA24E20D2DF19F872A84883CE944B798B6B148993691
F4BF17CC2952F9F85333A8492F63D460378014AF2A02A50972120B3DEC05E54E
CB2192E31A5FCB88AD6EBC88004B29F0EA91B346CB2B65FDDE1BCB5227C65EAE
14F191859B55CA7BF0815A7F5CD583085E902E48E09F7C4AB48E8DF7C550DB9E
0D37671146FCEF5E572F4520064244671B8E0EE9CD80F7A06B0DF881952E2170
8F9994BE756B1AB0A2C71C9E1F181F8F635F4282878D8BAF16B519D685E99985
236FD4EB83127DF45ABAB8137580919A633EE3813835FA1FA7930EA3627CCF57
8C01329CF170ACC8A08E65478C3FA7C39AB68CC6172A83F50406EF3F6A532969
08CB29259774A33D26DCAFAC7E35B1F16F3A8E092EF1408EAFBFE34714EB6B53
37C1CDBEB6FFB780E148AB32D8CC4B8393DAFC29061AF59D059A03128F76232C
2281DEBFFDF89440008BAA676E400D2909BE95350BA495CB5BC2B0C1E808A67F
8C12A7B0B29778B8DAF30432622D84138909E5866871C566241AC9893696C20B
53B11E41A7E8D0B08D2C1C7D18D2F3F9F0DAB2DFB99EA17E53D2FB83C48EF123
80C085C6395E6333E51E0928F1E8040F520A531C313E5571E37FC7A2ABA8E589
BD100B2C01D13EC317E11EA4B3033D3E63ED7FCECCF610DC78319E052431F2EE
F37473B1B362897E5EF60FECFFF3DD33C36049D888DA082105B46123D78C296F
C1CDBEEE60F6AA39B22C5163C54F6DD9E324F88BC13383176FE2FC88AF56CEF3
467AC8860B6E5D6A886F0A3F6F043D0ADDDD45354F69070A45823968D31467F1
28D2C18DB5901470323CC6880CAF849F6FDC1CAB1301B24624190B06F98CB493
B883BC8D3ED2BF23896D4ED94B5ED6EA0BAB6918D458FE8D246257EB09300550
4A4A865BC9D686120BECFC329F468ADC94B7917E05EAAECCCF433A57BE01EACD
9B96E4369AD38E0E877C4E9F6944A6DC4D7A053F304EB4DAB9FF375DFF3A4F42
A9E68C87E7DC462F557FFC6B5A5A3977A4903F3DF37904F99B1F1E0449A69BDC
6D9BA0A87C4296A398C3FED6211868176C0E975288BB3E5BA0C8839A2B5CF275
DA3E9C8AB1FAD2E20EB2456138F324DB3C6872923EE1A785E58B89DFACCF676C
5F4CBC2ABD84E52854D01D2383D063A3DDEE5D18FC72D49F3C1C5B0699F2A93A
2FE26A8A4CD859C88ADF1DDAA01704889764BC7A895E2707548FC587970D7BBC
CA26876B9476AF789D099274522195B62B18FAAABF7966BC693FD014C9686AC5
A2EE90658A218DAF93B6BE47FD647C1291A999270C267A28FF077FF78A8E4249
2F0A7E3FA0A1D3DF9D1D1F66FF954ED296277AD7DE85FECCC788AA88B9B9A1C9
E17BF86E7D7FE3F2F7C20771DA823896F141733BFAC034920D3B6F3FFD44CD29
6FF1A159FD3A6A543795BB3AB0EF517E58ACF8300938CA4010DC5AB5197E4B94
48
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
@@ -7567,8 +7573,7 @@ E69030FD907778821C66F93220A31991386640AC2315A5B7DB80B4AE91A6A4D7
cleartomark
{restore}if
%%EndFont
TeXDict begin 40258431 52099146 1000 600 600
(/usr/local/src/bash/bash-20250418/doc/bashref.dvi)
TeXDict begin 40258431 52099146 1000 600 600 (bashref.dvi)
@start /Fa 130[55 1[55 123[{ T1Encoding ReEncodeFont }2
116.231 /SFRM1440 rf /Fb 133[34 41 41 55 41 43 30 30
30 41 43 38 43 64 21 41 23 21 43 38 23 34 43 34 43 38
@@ -7597,8 +7602,8 @@ TeXDict begin 40258431 52099146 1000 600 600
96 116 74 96 1[46 96 96 77 81 94 89 87 93 1[58 5[61 61
61 61 61 61 61 61 61 61 1[34 41 34 31[68 72 11[{}63 109.091
/CMBX12 rf /Fl 134[44 42 1[42 1[30 37 38 1[46 46 51 74
23 2[28 1[42 28 42 46 42 1[46 45[46 5[33 3[37 37 27[51
12[{}23 90.9091 /CMTI10 rf /Fm 135[56 2[56 1[42 55 1[51
23 2[28 1[42 28 42 46 42 42 46 45[46 5[33 3[37 37 27[51
12[{}24 90.9091 /CMTI10 rf /Fm 135[56 2[56 1[42 55 1[51
58 56 1[47 2[27 1[58 49 51 57 54 53 56 97[{}16 90.9091
/CMCSC10 rf /Fn 197[25 58[{}1 90.9091 /CMMI10 rf /Fo
197[33 58[{}1 119.552 /CMMI12 rf /Fp 134[85 85 1[85 90
@@ -7646,7 +7651,7 @@ ifelse
TeXDict begin 1 0 bop 150 1318 a Fv(Bash)64 b(Reference)j(Man)-5
b(ual)p 150 1385 3600 34 v 2361 1481 a Fu(Reference)31
b(Do)s(cumen)m(tation)i(for)d(Bash)2428 1589 y(Edition)h(5.3,)g(for)f
Ft(Bash)g Fu(V)-8 b(ersion)31 b(5.3.)3333 1697 y(April)f(2025)150
Ft(Bash)g Fu(V)-8 b(ersion)31 b(5.3.)3364 1697 y(Ma)m(y)g(2025)150
4927 y Fs(Chet)45 b(Ramey)-11 b(,)46 b(Case)g(W)-11 b(estern)46
b(Reserv)l(e)g(Univ)l(ersit)l(y)150 5068 y(Brian)f(F)-11
b(o)l(x,)45 b(F)-11 b(ree)45 b(Soft)l(w)l(are)h(F)-11
@@ -7654,15 +7659,16 @@ b(oundation)p 150 5141 3600 17 v eop end
%%Page: 2 2
TeXDict begin 2 1 bop 150 4279 a Fu(This)35 b(text)h(is)g(a)g(brief)f
(description)h(of)f(the)h(features)g(that)g(are)g(presen)m(t)g(in)f
(the)h(Bash)f(shell)h(\(v)m(ersion)150 4389 y(5.3,)c(7)e(April)h
(2025\).)150 4523 y(This)36 b(is)g(Edition)h(5.3,)j(last)d(up)s(dated)e
(7)i(April)g(2025,)j(of)c Fr(The)h(GNU)g(Bash)g(Reference)g(Man)m(ual)p
Fu(,)i(for)150 4633 y Ft(Bash)p Fu(,)29 b(V)-8 b(ersion)31
b(5.3.)150 4767 y(Cop)m(yrigh)m(t)602 4764 y(c)577 4767
y Fq(\015)f Fu(1988{2025)35 b(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8
b(oundation,)31 b(Inc.)390 4902 y(P)m(ermission)21 b(is)f(gran)m(ted)h
(to)g(cop)m(y)-8 b(,)24 b(distribute)c(and/or)h(mo)s(dify)e(this)i(do)s
(cumen)m(t)f(under)f(the)390 5011 y(terms)25 b(of)h(the)f(GNU)h(F)-8
(the)h(Bash)f(shell)h(\(v)m(ersion)150 4389 y(5.3,)c(18)f(Ma)m(y)g
(2025\).)150 4523 y(This)k(is)h(Edition)f(5.3,)k(last)d(up)s(dated)e
(18)j(Ma)m(y)g(2025,)i(of)c Fr(The)h(GNU)g(Bash)g(Reference)g(Man)m
(ual)p Fu(,)i(for)150 4633 y Ft(Bash)p Fu(,)29 b(V)-8
b(ersion)31 b(5.3.)150 4767 y(Cop)m(yrigh)m(t)602 4764
y(c)577 4767 y Fq(\015)f Fu(1988{2025)35 b(F)-8 b(ree)31
b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)390 4902
y(P)m(ermission)21 b(is)f(gran)m(ted)h(to)g(cop)m(y)-8
b(,)24 b(distribute)c(and/or)h(mo)s(dify)e(this)i(do)s(cumen)m(t)f
(under)f(the)390 5011 y(terms)25 b(of)h(the)f(GNU)h(F)-8
b(ree)27 b(Do)s(cumen)m(tation)g(License,)g(V)-8 b(ersion)26
b(1.3)g(or)f(an)m(y)h(later)g(v)m(ersion)390 5121 y(published)43
b(b)m(y)h(the)h(F)-8 b(ree)46 b(Soft)m(w)m(are)g(F)-8
@@ -17077,271 +17083,285 @@ b(The)37 b Ft(type)g Fu(and)g Ft(command)f Fu(builtins)i(will)g(not)g
(rep)s(ort)f(a)i(non-executable)g(\014le)f(as)g(ha)m(ving)h(b)s(een)330
408 y(found,)26 b(though)h(the)g(shell)g(will)g(attempt)h(to)g(execute)
g(suc)m(h)f(a)g(\014le)g(if)g(it)g(is)g(the)g(only)g(so-named)g(\014le)
330 518 y(found)i(in)h Ft($PATH)p Fu(.)154 655 y(71.)61
330 518 y(found)i(in)h Ft($PATH)p Fu(.)154 648 y(71.)61
b(The)30 b Ft(ulimit)f Fu(builtin)g(uses)h(a)h(blo)s(c)m(k)g(size)g(of)
g(512)g(b)m(ytes)g(for)f(the)h Ft(-c)f Fu(and)g Ft(-f)f
Fu(options.)154 791 y(72.)61 b(The)35 b Ft(unset)e Fu(builtin)i(with)g
Fu(options.)154 778 y(72.)61 b(The)35 b Ft(unset)e Fu(builtin)i(with)g
(the)g Ft(-v)f Fu(option)i(sp)s(eci\014ed)e(returns)g(a)i(fatal)g
(error)f(if)g(it)g(attempts)h(to)330 901 y(unset)29 b(a)g
(error)f(if)g(it)g(attempts)h(to)330 888 y(unset)29 b(a)g
Ft(readonly)e Fu(or)i Ft(non-unsettable)c Fu(v)-5 b(ariable,)30
b(whic)m(h)f(causes)h(a)f(non-in)m(teractiv)m(e)j(shell)d(to)330
1010 y(exit.)154 1147 y(73.)61 b(When)39 b(ask)m(ed)g(to)g(unset)g(a)g
997 y(exit.)154 1127 y(73.)61 b(When)39 b(ask)m(ed)g(to)g(unset)g(a)g
(v)-5 b(ariable)39 b(that)h(app)s(ears)e(in)g(an)h(assignmen)m(t)g
(statemen)m(t)i(preceding)330 1256 y(the)30 b(command,)f(the)h
(statemen)m(t)i(preceding)330 1237 y(the)30 b(command,)f(the)h
Ft(unset)e Fu(builtin)h(attempts)i(to)f(unset)f(a)h(v)-5
b(ariable)31 b(of)e(the)h(same)g(name)g(in)f(the)330
1366 y(curren)m(t)24 b(or)g(previous)g(scop)s(e)g(as)g(w)m(ell.)40
1347 y(curren)m(t)24 b(or)g(previous)g(scop)s(e)g(as)g(w)m(ell.)40
b(This)23 b(implemen)m(ts)i(the)f(required)f Ft(")p Fu(if)h(an)g
(assigned)g(v)-5 b(ariable)330 1476 y(is)34 b(further)e(mo)s(di\014ed)g
(assigned)g(v)-5 b(ariable)330 1456 y(is)34 b(further)e(mo)s(di\014ed)g
(b)m(y)i(the)g(utilit)m(y)-8 b(,)36 b(the)e(mo)s(di\014cations)g(made)g
(b)m(y)f(the)h(utilit)m(y)h(shall)f(p)s(ersist)p Ft(")330
1585 y Fu(b)s(eha)m(vior.)154 1722 y(74.)61 b(The)39
1566 y Fu(b)s(eha)m(vior.)154 1696 y(74.)61 b(The)39
b(arriv)-5 b(al)41 b(of)f Ft(SIGCHLD)e Fu(when)h(a)h(trap)g(is)g(set)h
(on)f Ft(SIGCHLD)e Fu(do)s(es)h(not)h(in)m(terrupt)g(the)g
Ft(wait)330 1831 y Fu(builtin)c(and)h(cause)g(it)h(to)f(return)f
Ft(wait)330 1805 y Fu(builtin)c(and)h(cause)g(it)h(to)f(return)f
(immediately)-8 b(.)62 b(The)37 b(trap)f(command)h(is)g(run)e(once)j
(for)f(eac)m(h)330 1941 y(c)m(hild)31 b(that)g(exits.)154
2078 y(75.)61 b(Bash)27 b(remo)m(v)m(es)h(an)e(exited)i(bac)m(kground)e
(for)f(eac)m(h)330 1915 y(c)m(hild)31 b(that)g(exits.)154
2045 y(75.)61 b(Bash)27 b(remo)m(v)m(es)h(an)e(exited)i(bac)m(kground)e
(pro)s(cess's)h(status)g(from)f(the)h(list)g(of)g(suc)m(h)f(statuses)h
(after)330 2187 y(the)k Ft(wait)e Fu(builtin)h(returns)f(it.)275
2353 y(There)34 b(is)g(other)h Fm(posix)f Fu(b)s(eha)m(vior)h(that)g
(Bash)g(do)s(es)f(not)h(implemen)m(t)g(b)m(y)g(default)f(ev)m(en)i
(when)d(in)150 2462 y Fm(posix)d Fu(mo)s(de.)40 b(Sp)s(eci\014cally:)
199 2601 y(1.)61 b(The)30 b Ft(fc)f Fu(builtin)h(c)m(hec)m(ks)i
(after)330 2155 y(the)k Ft(wait)e Fu(builtin)h(returns)f(it.)275
2305 y(There)e(is)i(additional)g Fm(posix)f Fu(b)s(eha)m(vior)g(that)h
(Bash)g(do)s(es)f(not)g(implemen)m(t)h(b)m(y)f(default)h(ev)m(en)g
(when)150 2415 y(in)h Fm(posix)g Fu(mo)s(de.)40 b(Sp)s(eci\014cally:)
199 2545 y(1.)61 b Fm(posix)30 b Fu(requires)g(that)i(w)m(ord)e
(splitting)i(b)s(e)e(b)m(yte-orien)m(ted.)44 b(That)30
b(is,)i(eac)m(h)g Fl(byte)37 b Fu(in)31 b(the)g(v)-5
b(alue)31 b(of)330 2654 y Ft(IFS)23 b Fu(p)s(oten)m(tially)j(splits)f
(a)g(w)m(ord,)g(ev)m(en)g(if)f(that)h(b)m(yte)g(is)g(part)f(of)g(a)h(m)
m(ultib)m(yte)h(c)m(haracter)f(in)f Ft(IFS)g Fu(or)330
2764 y(part)29 b(of)f(m)m(ultib)m(yte)i(c)m(haracter)g(in)f(the)g(w)m
(ord.)39 b(Bash)29 b(allo)m(ws)h(m)m(ultib)m(yte)g(c)m(haracters)g(in)f
(the)f(v)-5 b(alue)330 2874 y(of)35 b Ft(IFS)p Fu(,)f(treating)i(a)f(v)
-5 b(alid)34 b(m)m(ultib)m(yte)i(c)m(haracter)g(as)f(a)f(single)i
(delimiter,)g(and)e(will)g(not)h(split)g(a)330 2983 y(v)-5
b(alid)29 b(m)m(ultib)m(yte)i(c)m(haracter)f(ev)m(en)g(if)f(one)g(of)h
(the)f(b)m(ytes)g(comp)s(osing)h(that)f(c)m(haracter)i(app)s(ears)d(in)
330 3093 y Ft(IFS)p Fu(.)40 b(This)29 b(is)i Fm(posix)e
Fu(in)m(terpretation)j(1560,)h(further)c(mo)s(di\014ed)g(b)m(y)h(issue)
g(1924.)199 3223 y(2.)61 b(The)30 b Ft(fc)f Fu(builtin)h(c)m(hec)m(ks)i
Ft($EDITOR)c Fu(as)j(a)f(program)g(to)h(edit)g(history)f(en)m(tries)h
(if)f Ft(FCEDIT)f Fu(is)h(unset,)330 2710 y(rather)g(than)g(defaulting)
(if)f Ft(FCEDIT)f Fu(is)h(unset,)330 3333 y(rather)g(than)g(defaulting)
h(directly)g(to)g Ft(ed)p Fu(.)40 b Ft(fc)30 b Fu(uses)g
Ft(ed)g Fu(if)g Ft(EDITOR)f Fu(is)h(unset.)199 2847 y(2.)61
Ft(ed)g Fu(if)g Ft(EDITOR)f Fu(is)h(unset.)199 3463 y(3.)61
b(As)29 b(noted)g(ab)s(o)m(v)m(e,)i(Bash)e(requires)g(the)g
Ft(xpg_echo)e Fu(option)j(to)g(b)s(e)e(enabled)h(for)g(the)g
Ft(echo)f Fu(builtin)330 2957 y(to)j(b)s(e)f(fully)g(conforman)m(t.)275
3122 y(Bash)c(can)g(b)s(e)f(con\014gured)h(to)g(b)s(e)g
Ft(echo)f Fu(builtin)330 3572 y(to)j(b)s(e)f(fully)g(conforman)m(t.)275
3723 y(Bash)c(can)g(b)s(e)f(con\014gured)h(to)g(b)s(e)g
Fm(posix)p Fu(-conforman)m(t)g(b)m(y)g(default,)h(b)m(y)f(sp)s
(ecifying)g(the)g Ft(--enable-)150 3232 y(strict-posix-default)c
(ecifying)g(the)g Ft(--enable-)150 3832 y(strict-posix-default)c
Fu(to)27 b Ft(configure)e Fu(when)h(building)h(\(see)h(Section)g(10.8)g
([Optional)g(F)-8 b(eatures],)150 3341 y(page)31 b(178\).)150
3588 y Fs(6.12)68 b(Shell)46 b(Compatibilit)l(y)h(Mo)t(de)150
3748 y Fu(Bash-4.0)33 b(in)m(tro)s(duced)f(the)f(concept)i(of)f(a)g
([Optional)g(F)-8 b(eatures],)150 3942 y(page)31 b(178\).)150
4174 y Fs(6.12)68 b(Shell)46 b(Compatibilit)l(y)h(Mo)t(de)150
4333 y Fu(Bash-4.0)33 b(in)m(tro)s(duced)f(the)f(concept)i(of)f(a)g
Fr(shell)g(compatibilit)m(y)i(lev)m(el)p Fu(,)g(sp)s(eci\014ed)d(as)h
(a)g(set)h(of)f(options)150 3857 y(to)f(the)f(shopt)g(builtin)g(\()p
(a)g(set)h(of)f(options)150 4443 y(to)f(the)f(shopt)g(builtin)g(\()p
Ft(compat31)p Fu(,)e Ft(compat32)p Fu(,)h Ft(compat40)p
Fu(,)f Ft(compat41)p Fu(,)g(and)i(so)g(on\).)41 b(There)30
b(is)g(only)150 3967 y(one)f(curren)m(t)f(compatibilit)m(y)j(lev)m(el)f
b(is)g(only)150 4552 y(one)f(curren)m(t)f(compatibilit)m(y)j(lev)m(el)f
({)f(eac)m(h)h(option)f(is)g(m)m(utually)g(exclusiv)m(e.)41
b(The)28 b(compatibilit)m(y)j(lev)m(el)150 4076 y(is)39
b(The)28 b(compatibilit)m(y)j(lev)m(el)150 4662 y(is)39
b(in)m(tended)g(to)h(allo)m(w)g(users)e(to)i(select)h(b)s(eha)m(vior)e
(from)f(previous)h(v)m(ersions)g(that)h(is)f(incompatible)150
4186 y(with)d(new)m(er)g(v)m(ersions)g(while)g(they)g(migrate)h
4772 y(with)d(new)m(er)g(v)m(ersions)g(while)g(they)g(migrate)h
(scripts)f(to)h(use)f(curren)m(t)f(features)i(and)e(b)s(eha)m(vior.)58
b(It's)150 4296 y(in)m(tended)30 b(to)h(b)s(e)f(a)h(temp)s(orary)f
(solution.)275 4434 y(This)k(section)j(do)s(es)e(not)h(men)m(tion)g(b)s
b(It's)150 4881 y(in)m(tended)30 b(to)h(b)s(e)f(a)h(temp)s(orary)f
(solution.)275 5011 y(This)k(section)j(do)s(es)e(not)h(men)m(tion)g(b)s
(eha)m(vior)g(that)g(is)f(standard)g(for)g(a)h(particular)g(v)m(ersion)
g(\(e.g.,)150 4544 y(setting)d Ft(compat32)c Fu(means)i(that)h(quoting)
g(\(e.g.,)150 5121 y(setting)d Ft(compat32)c Fu(means)i(that)h(quoting)
g(the)g(righ)m(t)g(hand)e(side)h(of)h(the)f(regexp)h(matc)m(hing)h(op)s
(erator)150 4653 y(quotes)42 b(sp)s(ecial)f(regexp)h(c)m(haracters)g
(erator)150 5230 y(quotes)42 b(sp)s(ecial)f(regexp)h(c)m(haracters)g
(in)f(the)g(w)m(ord,)j(whic)m(h)c(is)i(default)f(b)s(eha)m(vior)g(in)g
(bash-3.2)h(and)150 4763 y(subsequen)m(t)30 b(v)m(ersions\).)275
4902 y(If)f(a)h(user)f(enables,)h(sa)m(y)-8 b(,)31 b
Ft(compat32)p Fu(,)d(it)i(ma)m(y)g(a\013ect)h(the)f(b)s(eha)m(vior)g
(of)g(other)g(compatibilit)m(y)h(lev)m(els)150 5011 y(up)23
b(to)h(and)f(including)h(the)g(curren)m(t)f(compatibilit)m(y)j(lev)m
(el.)41 b(The)23 b(idea)h(is)g(that)g(eac)m(h)h(compatibilit)m(y)h(lev)
m(el)150 5121 y(con)m(trols)35 b(b)s(eha)m(vior)f(that)g(c)m(hanged)g
(in)f(that)h(v)m(ersion)g(of)g(Bash,)h(but)e(that)h(b)s(eha)m(vior)g
(ma)m(y)g(ha)m(v)m(e)h(b)s(een)150 5230 y(presen)m(t)f(in)g(earlier)g
(v)m(ersions.)52 b(F)-8 b(or)35 b(instance,)g(the)f(c)m(hange)h(to)g
(use)f(lo)s(cale-based)h(comparisons)f(with)150 5340
y(the)e Ft([[)f Fu(command)g(came)h(in)g(bash-4.1,)h(and)d(earlier)j(v)
m(ersions)f(used)f(ASCI)s(I-based)f(comparisons,)i(so)p
(bash-3.2)h(and)150 5340 y(subsequen)m(t)30 b(v)m(ersions\).)p
eop end
%%Page: 122 128
TeXDict begin 122 127 bop 150 -116 a Fu(Chapter)30 b(6:)41
b(Bash)30 b(F)-8 b(eatures)2439 b(122)150 299 y(enabling)27
b(Bash)30 b(F)-8 b(eatures)2439 b(122)275 299 y(If)29
b(a)h(user)f(enables,)h(sa)m(y)-8 b(,)31 b Ft(compat32)p
Fu(,)d(it)i(ma)m(y)g(a\013ect)h(the)f(b)s(eha)m(vior)g(of)g(other)g
(compatibilit)m(y)h(lev)m(els)150 408 y(up)23 b(to)h(and)f(including)h
(the)g(curren)m(t)f(compatibilit)m(y)j(lev)m(el.)41 b(The)23
b(idea)h(is)g(that)g(eac)m(h)h(compatibilit)m(y)h(lev)m(el)150
518 y(con)m(trols)35 b(b)s(eha)m(vior)f(that)g(c)m(hanged)g(in)f(that)h
(v)m(ersion)g(of)g(Bash,)h(but)e(that)h(b)s(eha)m(vior)g(ma)m(y)g(ha)m
(v)m(e)h(b)s(een)150 628 y(presen)m(t)f(in)g(earlier)g(v)m(ersions.)52
b(F)-8 b(or)35 b(instance,)g(the)f(c)m(hange)h(to)g(use)f(lo)s
(cale-based)h(comparisons)f(with)150 737 y(the)e Ft([[)f
Fu(command)g(came)h(in)g(bash-4.1,)h(and)d(earlier)j(v)m(ersions)f
(used)f(ASCI)s(I-based)f(comparisons,)i(so)150 847 y(enabling)27
b Ft(compat32)e Fu(will)i(enable)g(ASCI)s(I-based)e(comparisons)i(as)g
(w)m(ell.)41 b(That)26 b(gran)m(ularit)m(y)i(ma)m(y)g(not)150
408 y(b)s(e)i(su\016cien)m(t)i(for)f(all)g(uses,)g(and)g(as)g(a)g
956 y(b)s(e)i(su\016cien)m(t)i(for)f(all)g(uses,)g(and)g(as)g(a)g
(result)g(users)f(should)g(emplo)m(y)i(compatibilit)m(y)h(lev)m(els)g
(carefully)-8 b(.)150 518 y(Read)31 b(the)f(do)s(cumen)m(tation)h(for)g
(a)f(particular)h(feature)g(to)g(\014nd)e(out)h(the)h(curren)m(t)f(b)s
(eha)m(vior.)275 665 y(Bash-4.3)44 b(in)m(tro)s(duced)e(a)h(new)f
(carefully)-8 b(.)150 1066 y(Read)31 b(the)f(do)s(cumen)m(tation)h(for)
g(a)f(particular)h(feature)g(to)g(\014nd)e(out)h(the)h(curren)m(t)f(b)s
(eha)m(vior.)275 1200 y(Bash-4.3)44 b(in)m(tro)s(duced)e(a)h(new)f
(shell)h(v)-5 b(ariable:)65 b Ft(BASH_COMPAT)p Fu(.)75
b(The)42 b(v)-5 b(alue)43 b(assigned)g(to)g(this)150
775 y(v)-5 b(ariable)32 b(\(a)g(decimal)h(v)m(ersion)e(n)m(um)m(b)s(er)
f(lik)m(e)j(4.2,)g(or)e(an)h(in)m(teger)g(corresp)s(onding)f(to)h(the)f
Ft(compat)p Fr(NN)150 884 y Fu(option,)g(lik)m(e)h(42\))f(determines)g
(the)f(compatibilit)m(y)j(lev)m(el.)275 1032 y(Starting)h(with)g
(bash-4.4,)i(Bash)f(b)s(egan)f(deprecating)h(older)f(compatibilit)m(y)j
(lev)m(els.)54 b(Ev)m(en)m(tually)-8 b(,)150 1141 y(the)31
b(options)f(will)h(b)s(e)f(remo)m(v)m(ed)h(in)f(fa)m(v)m(or)i(of)e
Ft(BASH_COMPAT)p Fu(.)275 1289 y(Bash-5.0)39 b(w)m(as)f(the)g(\014nal)g
(v)m(ersion)g(for)g(whic)m(h)f(there)h(w)m(as)g(an)g(individual)f
(shopt)h(option)g(for)g(the)150 1398 y(previous)31 b(v)m(ersion.)43
b Ft(BASH_COMPAT)29 b Fu(is)i(the)g(only)g(mec)m(hanism)h(to)g(con)m
(trol)h(the)e(compatibilit)m(y)i(lev)m(el)g(in)150 1508
y(v)m(ersions)e(new)m(er)f(than)g(bash-5.0.)275 1655
y(The)24 b(follo)m(wing)i(table)g(describ)s(es)e(the)i(b)s(eha)m(vior)f
(c)m(hanges)h(con)m(trolled)g(b)m(y)f(eac)m(h)h(compatibilit)m(y)h(lev)
m(el)150 1765 y(setting.)43 b(The)30 b Ft(compat)p Fr(NN)39
b Fu(tag)32 b(is)f(used)f(as)h(shorthand)e(for)h(setting)i(the)f
(compatibilit)m(y)i(lev)m(el)f(to)g Fr(NN)150 1874 y
Fu(using)37 b(one)h(of)g(the)g(follo)m(wing)h(mec)m(hanisms.)63
b(F)-8 b(or)39 b(v)m(ersions)f(prior)f(to)h(bash-5.0,)j(the)d
(compatibilit)m(y)150 1984 y(lev)m(el)d(ma)m(y)f(b)s(e)e(set)i(using)e
(the)i(corresp)s(onding)e Ft(compat)p Fr(NN)41 b Fu(shopt)33
b(option.)50 b(F)-8 b(or)34 b(bash-4.3)f(and)g(later)150
2093 y(v)m(ersions,)40 b(the)e Ft(BASH_COMPAT)d Fu(v)-5
1310 y(v)-5 b(ariable)32 b(\(a)g(decimal)h(v)m(ersion)e(n)m(um)m(b)s
(er)f(lik)m(e)j(4.2,)g(or)e(an)h(in)m(teger)g(corresp)s(onding)f(to)h
(the)f Ft(compat)p Fr(NN)150 1419 y Fu(option,)g(lik)m(e)h(42\))f
(determines)g(the)f(compatibilit)m(y)j(lev)m(el.)275
1553 y(Starting)h(with)g(bash-4.4,)i(Bash)f(b)s(egan)f(deprecating)h
(older)f(compatibilit)m(y)j(lev)m(els.)54 b(Ev)m(en)m(tually)-8
b(,)150 1663 y(the)31 b(options)f(will)h(b)s(e)f(remo)m(v)m(ed)h(in)f
(fa)m(v)m(or)i(of)e Ft(BASH_COMPAT)p Fu(.)275 1797 y(Bash-5.0)39
b(w)m(as)f(the)g(\014nal)g(v)m(ersion)g(for)g(whic)m(h)f(there)h(w)m
(as)g(an)g(individual)f(shopt)h(option)g(for)g(the)150
1906 y(previous)31 b(v)m(ersion.)43 b Ft(BASH_COMPAT)29
b Fu(is)i(the)g(only)g(mec)m(hanism)h(to)g(con)m(trol)h(the)e
(compatibilit)m(y)i(lev)m(el)g(in)150 2016 y(v)m(ersions)e(new)m(er)f
(than)g(bash-5.0.)275 2150 y(The)24 b(follo)m(wing)i(table)g(describ)s
(es)e(the)i(b)s(eha)m(vior)f(c)m(hanges)h(con)m(trolled)g(b)m(y)f(eac)m
(h)h(compatibilit)m(y)h(lev)m(el)150 2259 y(setting.)43
b(The)30 b Ft(compat)p Fr(NN)39 b Fu(tag)32 b(is)f(used)f(as)h
(shorthand)e(for)h(setting)i(the)f(compatibilit)m(y)i(lev)m(el)f(to)g
Fr(NN)150 2369 y Fu(using)37 b(one)h(of)g(the)g(follo)m(wing)h(mec)m
(hanisms.)63 b(F)-8 b(or)39 b(v)m(ersions)f(prior)f(to)h(bash-5.0,)j
(the)d(compatibilit)m(y)150 2478 y(lev)m(el)d(ma)m(y)f(b)s(e)e(set)i
(using)e(the)i(corresp)s(onding)e Ft(compat)p Fr(NN)41
b Fu(shopt)33 b(option.)50 b(F)-8 b(or)34 b(bash-4.3)f(and)g(later)150
2588 y(v)m(ersions,)40 b(the)e Ft(BASH_COMPAT)d Fu(v)-5
b(ariable)39 b(is)e(preferred,)i(and)e(it)i(is)f(required)f(for)g
(bash-5.1)i(and)e(later)150 2203 y(v)m(ersions.)150 2381
y Ft(compat31)705 2522 y Fq(\017)60 b Fu(Quoting)32 b(the)f(rhs)g(of)g
(bash-5.1)i(and)e(later)150 2698 y(v)m(ersions.)150 2856
y Ft(compat31)705 2990 y Fq(\017)60 b Fu(Quoting)32 b(the)f(rhs)g(of)g
(the)h Ft([[)e Fu(command's)i(regexp)f(matc)m(hing)i(op)s(erator)f(\(=)
p Ft(~)p Fu(\))f(has)810 2632 y(no)f(sp)s(ecial)h(e\013ect)150
2804 y Ft(compat40)705 2945 y Fq(\017)60 b Fu(The)32
p Ft(~)p Fu(\))f(has)810 3099 y(no)f(sp)s(ecial)h(e\013ect)150
3258 y Ft(compat40)705 3392 y Fq(\017)60 b Fu(The)32
b(`)p Ft(<)p Fu(')g(and)g(`)p Ft(>)p Fu(')g(op)s(erators)h(to)g(the)f
Ft([[)g Fu(command)g(do)g(not)g(consider)h(the)f(curren)m(t)810
3055 y(lo)s(cale)41 b(when)d(comparing)i(strings;)k(they)c(use)f(ASCI)s
(I)f(ordering.)67 b(Bash)40 b(v)m(ersions)810 3164 y(prior)f(to)i
3501 y(lo)s(cale)41 b(when)d(comparing)i(strings;)k(they)c(use)f(ASCI)s
(I)f(ordering.)67 b(Bash)40 b(v)m(ersions)810 3611 y(prior)f(to)i
(bash-4.1)f(use)g(ASCI)s(I)e(collation)k(and)d(strcmp\(3\);)45
b(bash-4.1)c(and)e(later)810 3274 y(use)30 b(the)h(curren)m(t)f(lo)s
b(bash-4.1)c(and)e(later)810 3720 y(use)30 b(the)h(curren)m(t)f(lo)s
(cale's)i(collation)h(sequence)d(and)g(strcoll\(3\).)150
3446 y Ft(compat41)705 3587 y Fq(\017)60 b Fu(In)35 b
3879 y Ft(compat41)705 4013 y Fq(\017)60 b Fu(In)35 b
Fm(posix)f Fu(mo)s(de,)j Ft(time)d Fu(ma)m(y)i(b)s(e)f(follo)m(w)m(ed)i
(b)m(y)f(options)g(and)e(still)j(b)s(e)e(recognized)810
3696 y(as)c(a)f(reserv)m(ed)h(w)m(ord)f(\(this)h(is)f
Fm(posix)g Fu(in)m(terpretation)h(267\).)705 3837 y Fq(\017)60
4122 y(as)c(a)f(reserv)m(ed)h(w)m(ord)f(\(this)h(is)f
Fm(posix)g Fu(in)m(terpretation)h(267\).)705 4256 y Fq(\017)60
b Fu(In)33 b Fm(posix)h Fu(mo)s(de,)h(the)f(parser)g(requires)g(that)g
(an)g(ev)m(en)h(n)m(um)m(b)s(er)e(of)i(single)f(quotes)810
3947 y(o)s(ccur)28 b(in)g(the)h Fr(w)m(ord)i Fu(p)s(ortion)d(of)h(a)g
4366 y(o)s(ccur)28 b(in)g(the)h Fr(w)m(ord)i Fu(p)s(ortion)d(of)h(a)g
(double-quoted)f($)p Fi({)6 b Fu(.)23 b(.)f(.)11 b Fi(})29
b Fu(parameter)g(expansion)810 4056 y(and)34 b(treats)h(them)f(sp)s
b Fu(parameter)g(expansion)810 4475 y(and)34 b(treats)h(them)f(sp)s
(ecially)-8 b(,)37 b(so)e(that)g(c)m(haracters)g(within)f(the)h(single)
g(quotes)g(are)810 4166 y(considered)30 b(quoted)h(\(this)f(is)h
Fm(posix)e Fu(in)m(terpretation)j(221\).)150 4338 y Ft(compat42)705
4479 y Fq(\017)60 b Fu(The)45 b(replacemen)m(t)i(string)f(in)f
g(quotes)g(are)810 4585 y(considered)30 b(quoted)h(\(this)f(is)h
Fm(posix)e Fu(in)m(terpretation)j(221\).)150 4743 y Ft(compat42)705
4877 y Fq(\017)60 b Fu(The)45 b(replacemen)m(t)i(string)f(in)f
(double-quoted)h(pattern)f(substitution)g(do)s(es)h(not)810
4589 y(undergo)30 b(quote)h(remo)m(v)-5 b(al,)32 b(as)e(it)h(do)s(es)f
(in)g(v)m(ersions)h(after)g(bash-4.2.)705 4729 y Fq(\017)60
4987 y(undergo)30 b(quote)h(remo)m(v)-5 b(al,)32 b(as)e(it)h(do)s(es)f
(in)g(v)m(ersions)h(after)g(bash-4.2.)705 5121 y Fq(\017)60
b Fu(In)36 b Fm(posix)f Fu(mo)s(de,)j(single)e(quotes)h(are)g
(considered)f(sp)s(ecial)h(when)e(expanding)h(the)810
4839 y Fr(w)m(ord)g Fu(p)s(ortion)c(of)g(a)h(double-quoted)g($)p
5230 y Fr(w)m(ord)g Fu(p)s(ortion)c(of)g(a)h(double-quoted)g($)p
Fi({)6 b Fu(.)22 b(.)h(.)11 b Fi(})33 b Fu(parameter)g(expansion)f(and)
g(can)h(b)s(e)810 4949 y(used)40 b(to)i(quote)g(a)f(closing)h(brace)f
(or)g(other)h(sp)s(ecial)f(c)m(haracter)i(\(this)e(is)g(part)g(of)810
5058 y Fm(posix)36 b Fu(in)m(terpretation)h(221\);)42
b(in)36 b(later)h(v)m(ersions,)h(single)f(quotes)g(are)g(not)f(sp)s
(ecial)810 5168 y(within)30 b(double-quoted)g(w)m(ord)g(expansions.)150
5340 y Ft(compat43)p eop end
g(can)h(b)s(e)810 5340 y(used)40 b(to)i(quote)g(a)f(closing)h(brace)f
(or)g(other)h(sp)s(ecial)f(c)m(haracter)i(\(this)e(is)g(part)g(of)p
eop end
%%Page: 123 129
TeXDict begin 123 128 bop 150 -116 a Fu(Chapter)30 b(6:)41
b(Bash)30 b(F)-8 b(eatures)2439 b(123)705 299 y Fq(\017)60
b Fu(W)-8 b(ord)32 b(expansion)g(errors)g(are)g(considered)g(non-fatal)
h(errors)e(that)i(cause)f(the)g(cur-)810 408 y(ren)m(t)26
b(command)g(to)h(fail,)h(ev)m(en)f(in)f Fm(posix)f Fu(mo)s(de)h(\(the)g
(default)h(b)s(eha)m(vior)f(is)g(to)h(mak)m(e)810 518
y(them)j(fatal)i(errors)e(that)h(cause)g(the)f(shell)h(to)g(exit\).)705
647 y Fq(\017)60 b Fu(When)36 b(executing)h(a)f(shell)g(function,)h
(the)f(lo)s(op)g(state)h(\(while/un)m(til/etc.\))61 b(is)36
b(not)810 757 y(reset,)e(so)g Ft(break)d Fu(or)i Ft(continue)e
Fu(in)h(that)i(function)f(will)g(break)g(or)g(con)m(tin)m(ue)h(lo)s
(ops)810 866 y(in)h(the)g(calling)h(con)m(text.)57 b(Bash-4.4)37
b(and)d(later)i(reset)g(the)f(lo)s(op)g(state)i(to)e(prev)m(en)m(t)810
976 y(this.)150 1124 y Ft(compat44)705 1253 y Fq(\017)60
b Fu(The)38 b(shell)g(sets)g(up)g(the)g(v)-5 b(alues)38
b(used)g(b)m(y)g Ft(BASH_ARGV)d Fu(and)j Ft(BASH_ARGC)d
Fu(so)k(they)810 1363 y(can)26 b(expand)f(to)h(the)g(shell's)g(p)s
b(Bash)30 b(F)-8 b(eatures)2439 b(123)810 299 y Fm(posix)36
b Fu(in)m(terpretation)h(221\);)42 b(in)36 b(later)h(v)m(ersions,)h
(single)f(quotes)g(are)g(not)f(sp)s(ecial)810 408 y(within)30
b(double-quoted)g(w)m(ord)g(expansions.)150 579 y Ft(compat43)705
719 y Fq(\017)60 b Fu(W)-8 b(ord)32 b(expansion)g(errors)g(are)g
(considered)g(non-fatal)h(errors)e(that)i(cause)f(the)g(cur-)810
829 y(ren)m(t)26 b(command)g(to)h(fail,)h(ev)m(en)f(in)f
Fm(posix)f Fu(mo)s(de)h(\(the)g(default)h(b)s(eha)m(vior)f(is)g(to)h
(mak)m(e)810 938 y(them)j(fatal)i(errors)e(that)h(cause)g(the)f(shell)h
(to)g(exit\).)705 1078 y Fq(\017)60 b Fu(When)36 b(executing)h(a)f
(shell)g(function,)h(the)f(lo)s(op)g(state)h(\(while/un)m(til/etc.\))61
b(is)36 b(not)810 1188 y(reset,)e(so)g Ft(break)d Fu(or)i
Ft(continue)e Fu(in)h(that)i(function)f(will)g(break)g(or)g(con)m(tin)m
(ue)h(lo)s(ops)810 1297 y(in)h(the)g(calling)h(con)m(text.)57
b(Bash-4.4)37 b(and)d(later)i(reset)g(the)f(lo)s(op)g(state)i(to)e
(prev)m(en)m(t)810 1407 y(this.)150 1577 y Ft(compat44)705
1717 y Fq(\017)60 b Fu(The)38 b(shell)g(sets)g(up)g(the)g(v)-5
b(alues)38 b(used)g(b)m(y)g Ft(BASH_ARGV)d Fu(and)j Ft(BASH_ARGC)d
Fu(so)k(they)810 1827 y(can)26 b(expand)f(to)h(the)g(shell's)g(p)s
(ositional)g(parameters)g(ev)m(en)h(if)e(extended)h(debugging)810
1472 y(mo)s(de)k(is)g(not)h(enabled.)705 1601 y Fq(\017)60
1937 y(mo)s(de)k(is)g(not)h(enabled.)705 2077 y Fq(\017)60
b Fu(A)38 b(subshell)f(inherits)g(lo)s(ops)h(from)f(its)h(paren)m(t)g
(con)m(text,)k(so)c Ft(break)e Fu(or)i Ft(continue)810
1711 y Fu(will)d(cause)g(the)f(subshell)f(to)i(exit.)54
2186 y Fu(will)d(cause)g(the)f(subshell)f(to)i(exit.)54
b(Bash-5.0)36 b(and)d(later)j(reset)f(the)f(lo)s(op)h(state)g(to)810
1820 y(prev)m(en)m(t)c(the)g(exit.)705 1949 y Fq(\017)60
2296 y(prev)m(en)m(t)c(the)g(exit.)705 2436 y Fq(\017)60
b Fu(V)-8 b(ariable)27 b(assignmen)m(ts)g(preceding)e(builtins)g(lik)m
(e)i Ft(export)d Fu(and)i Ft(readonly)d Fu(that)j(set)810
2059 y(attributes)37 b(con)m(tin)m(ue)h(to)g(a\013ect)g(v)-5
2545 y(attributes)37 b(con)m(tin)m(ue)h(to)g(a\013ect)g(v)-5
b(ariables)37 b(with)g(the)f(same)h(name)g(in)g(the)f(calling)810
2168 y(en)m(vironmen)m(t)31 b(ev)m(en)g(if)f(the)h(shell)g(is)f(not)h
(in)f Fm(posix)f Fu(mo)s(de.)150 2317 y Ft(compat50)f(\(set)h(using)g
(BASH_COMPAT\))705 2426 y Fq(\017)60 b Fu(Bash-5.1)29
2655 y(en)m(vironmen)m(t)31 b(ev)m(en)g(if)f(the)h(shell)g(is)f(not)h
(in)f Fm(posix)f Fu(mo)s(de.)150 2826 y Ft(compat50)f(\(set)h(using)g
(BASH_COMPAT\))705 2935 y Fq(\017)60 b Fu(Bash-5.1)29
b(c)m(hanged)g(the)f(w)m(a)m(y)g Ft($RANDOM)e Fu(is)i(generated)h(to)f
(in)m(tro)s(duce)g(sligh)m(tly)h(more)810 2536 y(randomness.)39
(in)m(tro)s(duce)g(sligh)m(tly)h(more)810 3045 y(randomness.)39
b(If)30 b(the)f(shell)h(compatibilit)m(y)i(lev)m(el)f(is)f(set)g(to)h
(50)f(or)g(lo)m(w)m(er,)h(it)f(rev)m(erts)810 2645 y(to)e(the)g(metho)s
(50)f(or)g(lo)m(w)m(er,)h(it)f(rev)m(erts)810 3154 y(to)e(the)g(metho)s
(d)f(from)g(bash-5.0)h(and)f(previous)g(v)m(ersions,)i(so)e(seeding)h
(the)g(random)810 2755 y(n)m(um)m(b)s(er)36 b(generator)j(b)m(y)e
(the)g(random)810 3264 y(n)m(um)m(b)s(er)36 b(generator)j(b)m(y)e
(assigning)h(a)g(v)-5 b(alue)38 b(to)g Ft(RANDOM)e Fu(will)i(pro)s
(duce)e(the)i(same)810 2865 y(sequence)31 b(as)f(in)g(bash-5.0.)705
2993 y Fq(\017)60 b Fu(If)22 b(the)g(command)g(hash)f(table)i(is)f
(duce)e(the)i(same)810 3373 y(sequence)31 b(as)f(in)g(bash-5.0.)705
3513 y Fq(\017)60 b Fu(If)22 b(the)g(command)g(hash)f(table)i(is)f
(empt)m(y)-8 b(,)25 b(Bash)d(v)m(ersions)g(prior)g(to)h(bash-5.1)f
(prin)m(ted)810 3103 y(an)29 b(informational)i(message)g(to)f(that)g
(prin)m(ted)810 3623 y(an)29 b(informational)i(message)g(to)f(that)g
(e\013ect,)h(ev)m(en)g(when)d(pro)s(ducing)g(output)h(that)810
3213 y(can)40 b(b)s(e)g(reused)f(as)h(input.)69 b(Bash-5.1)42
3733 y(can)40 b(b)s(e)g(reused)f(as)h(input.)69 b(Bash-5.1)42
b(suppresses)c(that)j(message)g(when)e(the)i Ft(-l)810
3322 y Fu(option)31 b(is)f(supplied.)150 3471 y Ft(compat51)e(\(set)h
(using)g(BASH_COMPAT\))705 3580 y Fq(\017)60 b Fu(The)38
3842 y Fu(option)31 b(is)f(supplied.)150 4013 y Ft(compat51)e(\(set)h
(using)g(BASH_COMPAT\))705 4122 y Fq(\017)60 b Fu(The)38
b Ft(unset)g Fu(builtin)g(will)h(unset)f(the)h(arra)m(y)g
Ft(a)g Fu(giv)m(en)g(an)g(argumen)m(t)g(lik)m(e)h(`)p
Ft(a[@])p Fu('.)810 3690 y(Bash-5.2)32 b(will)f(unset)f(an)g(elemen)m
Ft(a[@])p Fu('.)810 4232 y(Bash-5.2)32 b(will)f(unset)f(an)g(elemen)m
(t)i(with)e(k)m(ey)i(`)p Ft(@)p Fu(')e(\(asso)s(ciativ)m(e)k(arra)m
(ys\))d(or)f(remo)m(v)m(e)810 3799 y(all)h(the)g(elemen)m(ts)h(without)
(ys\))d(or)f(remo)m(v)m(e)810 4341 y(all)h(the)g(elemen)m(ts)h(without)
e(unsetting)g(the)h(arra)m(y)g(\(indexed)f(arra)m(ys\).)705
3928 y Fq(\017)60 b Fu(Arithmetic)31 b(commands)f(\()h(\(\()6
4482 y Fq(\017)60 b Fu(Arithmetic)31 b(commands)f(\()h(\(\()6
b(.)23 b(.)f(.)11 b(\)\))31 b(\))g(and)f(the)g(expressions)g(in)g(an)h
(arithmetic)g(for)810 4038 y(statemen)m(t)h(can)f(b)s(e)f(expanded)f
(more)i(than)f(once.)705 4167 y Fq(\017)60 b Fu(Expressions)20
(arithmetic)g(for)810 4591 y(statemen)m(t)h(can)f(b)s(e)f(expanded)f
(more)i(than)f(once.)705 4731 y Fq(\017)60 b Fu(Expressions)20
b(used)f(as)i(argumen)m(ts)g(to)g(arithmetic)h(op)s(erators)f(in)f(the)
h Ft([[)f Fu(conditional)810 4276 y(command)30 b(can)h(b)s(e)f
(expanded)f(more)i(than)f(once.)705 4405 y Fq(\017)60
h Ft([[)f Fu(conditional)810 4841 y(command)30 b(can)h(b)s(e)f
(expanded)f(more)i(than)f(once.)705 4981 y Fq(\017)60
b Fu(The)31 b(expressions)g(in)h(substring)e(parameter)i(brace)g
(expansion)g(can)g(b)s(e)f(expanded)810 4515 y(more)g(than)f(once.)705
4644 y Fq(\017)60 b Fu(The)35 b(expressions)g(in)g(the)h($\(\()42
(expansion)g(can)g(b)s(e)f(expanded)810 5090 y(more)g(than)f(once.)705
5230 y Fq(\017)60 b Fu(The)35 b(expressions)g(in)g(the)h($\(\()42
b(.)22 b(.)g(.)47 b(\)\))36 b(w)m(ord)f(expansion)h(can)f(b)s(e)g
(expanded)g(more)810 4753 y(than)30 b(once.)705 4882
y Fq(\017)60 b Fu(Arithmetic)33 b(expressions)f(used)g(as)h(indexed)e
(arra)m(y)i(subscripts)e(can)i(b)s(e)f(expanded)810 4992
y(more)f(than)f(once.)705 5121 y Fq(\017)60 b Ft(test)29
b(-v)p Fu(,)35 b(when)f(giv)m(en)h(an)g(argumen)m(t)g(of)f(`)p
Ft(A[@])p Fu(',)h(where)f Fr(A)h Fu(is)f(an)h(existing)g(asso-)810
5230 y(ciativ)m(e)h(arra)m(y)-8 b(,)37 b(will)d(return)f(true)g(if)h
(the)h(arra)m(y)f(has)g(an)m(y)g(set)g(elemen)m(ts.)53
b(Bash-5.2)810 5340 y(will)31 b(lo)s(ok)g(for)f(and)g(rep)s(ort)f(on)i
(a)f(k)m(ey)i(named)d(`)p Ft(@)p Fu('.)p eop end
(expanded)g(more)810 5340 y(than)30 b(once.)p eop end
%%Page: 124 130
TeXDict begin 124 129 bop 150 -116 a Fu(Chapter)30 b(6:)41
b(Bash)30 b(F)-8 b(eatures)2439 b(124)705 299 y Fq(\017)60
b Fu(the)40 b($)p Fi({)p Fr(parameter)7 b Fu([:]=)p Fr(v)-5
b(alue)5 b Fi(})42 b Fu(w)m(ord)e(expansion)f(will)i(return)d
Fr(v)-5 b(alue)p Fu(,)43 b(b)s(efore)d(an)m(y)810 408
y(v)-5 b(ariable-sp)s(eci\014c)34 b(transformations)f(ha)m(v)m(e)h(b)s
(een)e(p)s(erformed)f(\(e.g.,)36 b(con)m(v)m(erting)e(to)810
518 y(lo)m(w)m(ercase\).)43 b(Bash-5.2)32 b(will)f(return)e(the)i
b Fu(Arithmetic)33 b(expressions)f(used)g(as)h(indexed)e(arra)m(y)i
(subscripts)e(can)i(b)s(e)f(expanded)810 408 y(more)f(than)f(once.)705
543 y Fq(\017)60 b Ft(test)29 b(-v)p Fu(,)35 b(when)f(giv)m(en)h(an)g
(argumen)m(t)g(of)f(`)p Ft(A[@])p Fu(',)h(where)f Fr(A)h
Fu(is)f(an)h(existing)g(asso-)810 653 y(ciativ)m(e)h(arra)m(y)-8
b(,)37 b(will)d(return)f(true)g(if)h(the)h(arra)m(y)f(has)g(an)m(y)g
(set)g(elemen)m(ts.)53 b(Bash-5.2)810 762 y(will)31 b(lo)s(ok)g(for)f
(and)g(rep)s(ort)f(on)i(a)f(k)m(ey)i(named)d(`)p Ft(@)p
Fu('.)705 897 y Fq(\017)60 b Fu(the)40 b($)p Fi({)p Fr(parameter)7
b Fu([:]=)p Fr(v)-5 b(alue)5 b Fi(})42 b Fu(w)m(ord)e(expansion)f(will)
i(return)d Fr(v)-5 b(alue)p Fu(,)43 b(b)s(efore)d(an)m(y)810
1006 y(v)-5 b(ariable-sp)s(eci\014c)34 b(transformations)f(ha)m(v)m(e)h
(b)s(een)e(p)s(erformed)f(\(e.g.,)36 b(con)m(v)m(erting)e(to)810
1116 y(lo)m(w)m(ercase\).)43 b(Bash-5.2)32 b(will)f(return)e(the)i
(\014nal)f(v)-5 b(alue)31 b(assigned)f(to)i(the)e(v)-5
b(ariable.)705 653 y Fq(\017)60 b Fu(P)m(arsing)40 b(command)f
b(ariable.)705 1250 y Fq(\017)60 b Fu(P)m(arsing)40 b(command)f
(substitutions)f(will)i(b)s(eha)m(v)m(e)g(as)f(if)g(extended)g
(globbing)h(\(see)810 762 y(Section)e(4.3.2)g([The)f(Shopt)f(Builtin],)
j(page)f(78\))g(is)f(enabled,)i(so)e(that)g(parsing)g(a)810
872 y(command)24 b(substitution)g(con)m(taining)h(an)f(extglob)i
(globbing)h(\(see)810 1360 y(Section)e(4.3.2)g([The)f(Shopt)f
(Builtin],)j(page)f(78\))g(is)f(enabled,)i(so)e(that)g(parsing)g(a)810
1469 y(command)24 b(substitution)g(con)m(taining)h(an)f(extglob)i
(pattern)e(\(sa)m(y)-8 b(,)27 b(as)d(part)g(of)g(a)h(shell)810
981 y(function\))30 b(will)h(not)g(fail.)41 b(This)30
1579 y(function\))30 b(will)h(not)g(fail.)41 b(This)30
b(assumes)g(the)h(in)m(ten)m(t)g(is)g(to)g(enable)g(extglob)g(b)s
(efore)810 1091 y(the)i(command)f(is)g(executed)h(and)f(w)m(ord)g
(efore)810 1689 y(the)i(command)f(is)g(executed)h(and)f(w)m(ord)g
(expansions)g(are)h(p)s(erformed.)45 b(It)33 b(will)f(fail)810
1200 y(at)42 b(w)m(ord)f(expansion)h(time)g(if)f(extglob)i(hasn't)e(b)s
(een)g(enabled)h(b)m(y)f(the)h(time)g(the)810 1310 y(command)30
b(is)h(executed.)150 1469 y Ft(compat52)d(\(set)h(using)g
(BASH_COMPAT\))705 1579 y Fq(\017)60 b Fu(The)23 b Ft(test)g
1798 y(at)42 b(w)m(ord)f(expansion)h(time)g(if)f(extglob)i(hasn't)e(b)s
(een)g(enabled)h(b)m(y)f(the)h(time)g(the)810 1908 y(command)30
b(is)h(executed.)150 2067 y Ft(compat52)d(\(set)h(using)g
(BASH_COMPAT\))705 2177 y Fq(\017)60 b Fu(The)23 b Ft(test)g
Fu(builtin)g(uses)h(its)g(historical)h(algorithm)g(to)f(parse)g(paren)m
(thesized)g(sub)s(ex-)810 1689 y(pressions)30 b(when)f(giv)m(en)i
(\014v)m(e)g(or)f(more)h(argumen)m(ts.)705 1823 y Fq(\017)60
(thesized)g(sub)s(ex-)810 2286 y(pressions)30 b(when)f(giv)m(en)i
(\014v)m(e)g(or)f(more)h(argumen)m(ts.)705 2421 y Fq(\017)60
b Fu(If)25 b(the)h Ft(-p)f Fu(or)h Ft(-P)f Fu(option)h(is)g(supplied)e
(to)j(the)f Ft(bind)e Fu(builtin,)i Ft(bind)f Fu(treats)i(an)m(y)f
(argu-)810 1933 y(men)m(ts)h(remaining)g(after)h(option)f(pro)s
(argu-)810 2531 y(men)m(ts)h(remaining)g(after)h(option)f(pro)s
(cessing)g(as)g(bindable)f(command)h(names,)h(and)810
2042 y(displa)m(ys)k(an)m(y)f(k)m(ey)i(sequences)f(b)s(ound)d(to)j
(those)g(commands,)g(instead)g(of)g(treating)810 2152
2640 y(displa)m(ys)k(an)m(y)f(k)m(ey)i(sequences)f(b)s(ound)d(to)j
(those)g(commands,)g(instead)g(of)g(treating)810 2750
y(the)f(argumen)m(ts)f(as)h(k)m(ey)g(sequences)g(to)g(bind.)705
2286 y Fq(\017)60 b Fu(In)m(teractiv)m(e)41 b(shells)d(will)h(notify)g
2884 y Fq(\017)60 b Fu(In)m(teractiv)m(e)41 b(shells)d(will)h(notify)g
(the)f(user)g(of)h(completed)g(jobs)f(while)g(sourcing)h(a)810
2396 y(script.)i(New)m(er)31 b(v)m(ersions)f(defer)g(noti\014cation)i
2994 y(script.)i(New)m(er)31 b(v)m(ersions)f(defer)g(noti\014cation)i
(un)m(til)f(script)f(execution)i(completes.)p eop end
%%Page: 125 131
TeXDict begin 125 130 bop 3614 -116 a Fu(125)150 299
BIN
View File
Binary file not shown.
+68 -64
View File
@@ -143,9 +143,8 @@ getlist (char *arg, struct cutpos **opp)
}
static int
cutbytes (SHELL_VAR *v, char *line, struct cutop *ops)
cutbytes (SHELL_VAR *v, arrayind_t ind, char *line, struct cutop *ops)
{
arrayind_t ind;
char *buf, *bmap;
size_t llen;
int i, b, n, s, e;
@@ -175,36 +174,31 @@ cutbytes (SHELL_VAR *v, char *line, struct cutop *ops)
buf[b++] = line[i];
buf[b] = 0;
if (v)
{
ind = 0;
#if defined (ARRAY_VARS)
bind_array_element (v, ind, buf, 0);
#endif
ind++;
}
if (v)
bind_array_element (v, ind, buf, 0);
else
#endif
printf ("%s\n", buf);
free (buf);
free (bmap);
return ind;
return 1;
}
static int
cutchars (SHELL_VAR *v, char *line, struct cutop *ops)
cutchars (SHELL_VAR *v, arrayind_t ind, char *line, struct cutop *ops)
{
arrayind_t ind;
char *buf, *bmap;
wchar_t *wbuf, *wb2;
size_t llen, wlen;
int i, b, n, s, e;
if (MB_CUR_MAX == 1)
return (cutbytes (v, line, ops));
return (cutbytes (v, ind, line, ops));
if (locale_utf8locale && utf8_mbsmbchar (line) == 0)
return (cutbytes (v, line, ops));
return (cutbytes (v, ind, line, ops));
llen = strlen (line);
wbuf = (wchar_t *)xmalloc ((llen + 1) * sizeof (wchar_t));
@@ -213,7 +207,7 @@ cutchars (SHELL_VAR *v, char *line, struct cutop *ops)
if (MB_INVALIDCH (wlen))
{
free (wbuf);
return (cutbytes (v, line, ops));
return (cutbytes (v, ind, line, ops));
}
bmap = xmalloc (llen + 1);
@@ -245,21 +239,17 @@ cutchars (SHELL_VAR *v, char *line, struct cutop *ops)
buf = bmap;
n = wcstombs (buf, wb2, llen);
if (v)
{
ind = 0;
#if defined (ARRAY_VARS)
bind_array_element (v, ind, buf, 0);
#endif
ind++;
}
if (v)
bind_array_element (v, ind, buf, 0);
else
#endif
printf ("%s\n", buf);
free (buf);
free (wb2);
return ind;
return 1;
}
/* The basic strategy is to cut the line into fields using strsep, populate
@@ -267,15 +257,12 @@ cutchars (SHELL_VAR *v, char *line, struct cutop *ops)
bitmap approach as cut{bytes,chars} and assign them to the array variable
V or print them on stdout. This function obeys SFLAG. */
static int
cutfields (SHELL_VAR *v, char *line, struct cutop *ops)
cutfields (SHELL_VAR *v, arrayind_t ind, char *line, struct cutop *ops)
{
arrayind_t ind;
char *buf, *bmap, *field, **fields, delim[2];
size_t llen, fsize;
int i, b, n, s, e, nf;
ind = 0;
delim[0] = ops->delim;
delim[1] = '\0';
@@ -302,17 +289,15 @@ cutfields (SHELL_VAR *v, char *line, struct cutop *ops)
{
free (fields);
if (ops->flags & SFLAG)
return ind;
if (v)
{
return 0;
#if defined (ARRAY_VARS)
bind_array_element (v, ind, line, 0);
#endif
ind++;
}
if (v)
bind_array_element (v, ind, line, 0);
else
#endif
printf ("%s\n", line);
return ind;
return 1;
}
bmap = xmalloc (nf + 1);
@@ -332,57 +317,61 @@ cutfields (SHELL_VAR *v, char *line, struct cutop *ops)
bmap[i] = 1;
}
for (i = 1, b = 0; b < nf; b++)
/* build the string and assign or print it all at once */
buf = xmalloc (strlen (line) + 1);
for (i = 1, n = b = 0; b < nf; b++)
{
if (bmap[b] == 0)
continue;
#if defined (ARRAY_VARS)
if (v)
{
bind_array_element (v, ind, fields[b], 0);
ind++;
}
else
#endif
{
if (i == 0)
putchar (ops->delim);
printf ("%s", fields[b]);
}
if (i == 0)
buf[n++] = ops->delim;
strcpy (buf + n, fields[b]);
n += STRLEN (fields[b]);
i = 0;
}
if (v == 0)
putchar ('\n');
return nf;
#if defined (ARRAY_VARS)
if (v)
bind_array_element (v, ind, buf, 0);
else
#endif
printf ("%s\n", buf);
free (bmap);
free (buf);
return 1;
}
static int
cutline (SHELL_VAR *v, char *line, struct cutop *ops)
cutline (SHELL_VAR *v, arrayind_t ind, char *line, struct cutop *ops)
{
int rval;
if (ops->flags & BFLAG)
rval = cutbytes (v, line, ops);
rval = cutbytes (v, ind, line, ops);
else if (ops->flags & CFLAG)
rval = cutchars (v, line, ops);
rval = cutchars (v, ind, line, ops);
else
rval = cutfields (v, line, ops);
rval = cutfields (v, ind, line, ops);
return (rval >= 0 ? EXECUTION_SUCCESS : EXECUTION_FAILURE);
return (rval);
}
static int
cutfile (SHELL_VAR *v, WORD_LIST *list, struct cutop *ops)
{
int fd, unbuffered_read;
int fd, unbuffered_read, r;
char *line, *b;
size_t llen;
WORD_LIST *l;
ssize_t n;
arrayind_t ind;
line = 0;
llen = 0;
ind = 0;
l = list;
do
@@ -409,7 +398,8 @@ cutfile (SHELL_VAR *v, WORD_LIST *list, struct cutop *ops)
QUIT;
if (line[n] == '\n')
line[n] = '\0'; /* cutline expects no newline terminator */
cutline (v, line, ops); /* can modify line */
r = cutline (v, ind, line, ops); /* can modify line */
ind += r;
}
if (fd > 0)
close (fd);
@@ -534,7 +524,8 @@ cut_internal (int which, WORD_LIST *list)
/* we implement cut as a builtin with a cutfile() function that opens each
filename in LIST as a filename (or `-' for stdin) and runs cutline on
every line in the file. */
every line in the file. lcut just runs cutline on the first string in
LIST. */
if (which == 0)
{
cutstring = list->word->word;
@@ -543,7 +534,9 @@ cut_internal (int which, WORD_LIST *list)
free (poslist);
return (EXECUTION_SUCCESS);
}
rval = cutline (v, cutstring, &op);
rval = cutline (v, 0, cutstring, &op);
/* Normalize rval, because cutline returns an increment for ind */
rval = (rval >= 0 ? EXECUTION_SUCCESS : EXECUTION_FAILURE);
}
else
rval = cutfile (v, list, &op);
@@ -568,8 +561,8 @@ char *lcut_doc[] = {
"Extract selected fields from a string.",
"",
"Select portions of LINE (as specified by LIST) and assign them to",
"elements of the indexed array ARRAY starting at index 0, or write",
"them to the standard output if -a is not specified.",
"element 0 of the indexed array ARRAY, or write them to the standard",
"output if -a is not specified.",
"",
"Items specified by LIST are either column positions or fields delimited",
"by a special character, and are described more completely in cut(1).",
@@ -577,6 +570,11 @@ char *lcut_doc[] = {
"Columns correspond to bytes (-b), characters (-c), or fields (-f). The",
"field delimiter is specified by -d (default TAB). Column numbering",
"starts at 1.",
"",
"When -a is specified, lcut assigns the selected portions of LINE",
"to index 0 of ARRAY. The string lcut assigns to ARRAY is identical",
"to the string it would write to the standard output if -a were not",
"supplied.",
(char *)NULL
};
@@ -593,7 +591,8 @@ char *cut_doc[] = {
"Extract selected fields from each line of a file.",
"",
"Select portions of each line (as specified by LIST) from each FILE",
"and write them to the standard output. cut reads from the standard",
"and write them to the standard output, or assign them to the indexed",
"array ARRAY starting at index 0. cut reads from the standard",
"input if no FILE arguments are specified or if a FILE argument is a",
"single hyphen.",
"",
@@ -603,6 +602,11 @@ char *cut_doc[] = {
"Columns correspond to bytes (-b), characters (-c), or fields (-f). The",
"field delimiter is specified by -d (default TAB). Column numbering",
"starts at 1.",
"",
"When -a is specified, cut assigns the output from each line it",
"processes to successive elements of ARRAY, beginning at 0. The",
"strings cut assigns to ARRAY are identical to the strings it would",
"write to the standard output if -a were not supplied.",
(char *)NULL
};
+616
View File
@@ -0,0 +1,616 @@
/* cut,lcut - extract specified fields from a line and assign them to an array
or print them to the standard output */
/*
Copyright (C) 2020,2022,2023 Free Software Foundation, Inc.
Bash is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Bash is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Bash. If not, see <http://www.gnu.org/licenses/>.
*/
/* See Makefile for compilation details. */
#include <config.h>
#if defined (HAVE_UNISTD_H)
# include <unistd.h>
#endif
#include "bashansi.h"
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include "loadables.h"
#include "shmbutil.h"
#define CUT_ARRAY_DEFAULT "CUTFIELDS"
#define NOPOS -2 /* sentinel for unset startpos/endpos */
#define BOL 0
#define EOL INT_MAX
#define NORANGE -1 /* just a position, no range */
#define BFLAG (1 << 0)
#define CFLAG (1 << 1)
#define DFLAG (1 << 2)
#define FFLAG (1 << 3)
#define SFLAG (1 << 4)
struct cutpos
{
int startpos, endpos; /* zero-based, correction done in getlist() */
};
struct cutop
{
int flags;
int delim;
int npos;
struct cutpos *poslist;
};
static int
poscmp (const void *a, const void *b)
{
struct cutpos *p1, *p2;
p1 = (struct cutpos *)a;
p2 = (struct cutpos *)b;
return (p1->startpos - p2->startpos);
}
static int
getlist (char *arg, struct cutpos **opp)
{
char *ntok, *ltok, *larg;
int s, e;
intmax_t num;
struct cutpos *poslist;
int npos, nsize;
poslist = 0;
nsize = npos = 0;
s = e = 0;
larg = arg;
while (ltok = strsep (&larg, ","))
{
if (*ltok == 0)
continue;
ntok = strsep (&ltok, "-");
if (*ntok == 0)
s = BOL;
else
{
if (valid_number (ntok, &num) == 0 || (int)num != num || num <= 0)
{
builtin_error ("%s: invalid list value", ntok);
*opp = poslist;
return -1;
}
s = num;
s--; /* fields are 1-based */
}
if (ltok == 0)
e = NORANGE;
else if (*ltok == 0)
e = EOL;
else
{
if (valid_number (ltok, &num) == 0 || (int)num != num || num <= 0)
{
builtin_error ("%s: invalid list value", ltok);
*opp = poslist;
return -1;
}
e = num;
e--;
if (e == s)
e = NORANGE;
}
if (npos == nsize)
{
nsize += 4;
poslist = (struct cutpos *)xrealloc (poslist, nsize * sizeof (struct cutpos));
}
poslist[npos].startpos = s;
poslist[npos].endpos = e;
npos++;
}
if (npos == 0)
{
builtin_error ("missing list of positions");
*opp = poslist;
return -1;
}
qsort (poslist, npos, sizeof(poslist[0]), poscmp);
*opp = poslist;
return npos;
}
static int
cutbytes (SHELL_VAR *v, char *line, struct cutop *ops)
{
arrayind_t ind;
char *buf, *bmap;
size_t llen;
int i, b, n, s, e;
llen = strlen (line);
buf = xmalloc (llen + 1);
bmap = xmalloc (llen + 1);
memset (bmap, 0, llen);
for (n = 0; n < ops->npos; n++)
{
s = ops->poslist[n].startpos; /* no translation needed yet */
e = ops->poslist[n].endpos;
if (e == NORANGE)
e = s;
else if (e == EOL || e >= llen)
e = llen - 1;
/* even if a column is specified multiple times, it will only be printed
once */
for (i = s; i <= e; i++)
bmap[i] = 1;
}
b = 0;
for (i = 0; i < llen; i++)
if (bmap[i])
buf[b++] = line[i];
buf[b] = 0;
if (v)
{
ind = 0;
#if defined (ARRAY_VARS)
bind_array_element (v, ind, buf, 0);
#endif
ind++;
}
else
printf ("%s\n", buf);
free (buf);
free (bmap);
return ind;
}
static int
cutchars (SHELL_VAR *v, char *line, struct cutop *ops)
{
arrayind_t ind;
char *buf, *bmap;
wchar_t *wbuf, *wb2;
size_t llen, wlen;
int i, b, n, s, e;
if (MB_CUR_MAX == 1)
return (cutbytes (v, line, ops));
if (locale_utf8locale && utf8_mbsmbchar (line) == 0)
return (cutbytes (v, line, ops));
llen = strlen (line);
wbuf = (wchar_t *)xmalloc ((llen + 1) * sizeof (wchar_t));
wlen = mbstowcs (wbuf, line, llen);
if (MB_INVALIDCH (wlen))
{
free (wbuf);
return (cutbytes (v, line, ops));
}
bmap = xmalloc (llen + 1);
memset (bmap, 0, llen);
for (n = 0; n < ops->npos; n++)
{
s = ops->poslist[n].startpos; /* no translation needed yet */
e = ops->poslist[n].endpos;
if (e == NORANGE)
e = s;
else if (e == EOL || e >= wlen)
e = wlen - 1;
/* even if a column is specified multiple times, it will only be printed
once */
for (i = s; i <= e; i++)
bmap[i] = 1;
}
wb2 = (wchar_t *)xmalloc ((wlen + 1) * sizeof (wchar_t));
b = 0;
for (i = 0; i < wlen; i++)
if (bmap[i])
wb2[b++] = wbuf[i];
wb2[b] = 0;
free (wbuf);
buf = bmap;
n = wcstombs (buf, wb2, llen);
if (v)
{
ind = 0;
#if defined (ARRAY_VARS)
bind_array_element (v, ind, buf, 0);
#endif
ind++;
}
else
printf ("%s\n", buf);
free (buf);
free (wb2);
return ind;
}
/* The basic strategy is to cut the line into fields using strsep, populate
an array of fields from 0..nf, then select those fields using the same
bitmap approach as cut{bytes,chars} and assign them to the array variable
V or print them on stdout. This function obeys SFLAG. */
static int
cutfields (SHELL_VAR *v, char *line, struct cutop *ops)
{
arrayind_t ind;
char *buf, *bmap, *field, **fields, delim[2];
size_t llen, fsize;
int i, b, n, s, e, nf;
ind = 0;
delim[0] = ops->delim;
delim[1] = '\0';
fields = 0;
nf = 0;
fsize = 0;
field = buf = line;
do
{
field = strsep (&buf, delim); /* destructive */
if (nf == fsize)
{
fsize += 8;
fields = xrealloc (fields, fsize * sizeof (char *));
}
fields[nf] = field;
if (field)
nf++;
}
while (field);
if (nf == 1)
{
free (fields);
if (ops->flags & SFLAG)
return ind;
if (v)
{
#if defined (ARRAY_VARS)
bind_array_element (v, ind, line, 0);
#endif
ind++;
}
else
printf ("%s\n", line);
return ind;
}
bmap = xmalloc (nf + 1);
memset (bmap, 0, nf);
for (n = 0; n < ops->npos; n++)
{
s = ops->poslist[n].startpos; /* no translation needed yet */
e = ops->poslist[n].endpos;
if (e == NORANGE)
e = s;
else if (e == EOL || e >= nf)
e = nf - 1;
/* even if a column is specified multiple times, it will only be printed
once */
for (i = s; i <= e; i++)
bmap[i] = 1;
}
for (i = 1, b = 0; b < nf; b++)
{
if (bmap[b] == 0)
continue;
#if defined (ARRAY_VARS)
if (v)
{
bind_array_element (v, ind, fields[b], 0);
ind++;
}
else
#endif
{
if (i == 0)
putchar (ops->delim);
printf ("%s", fields[b]);
}
i = 0;
}
if (v == 0)
putchar ('\n');
return nf;
}
static int
cutline (SHELL_VAR *v, char *line, struct cutop *ops)
{
int rval;
if (ops->flags & BFLAG)
rval = cutbytes (v, line, ops);
else if (ops->flags & CFLAG)
rval = cutchars (v, line, ops);
else
rval = cutfields (v, line, ops);
return (rval >= 0 ? EXECUTION_SUCCESS : EXECUTION_FAILURE);
}
static int
cutfile (SHELL_VAR *v, WORD_LIST *list, struct cutop *ops)
{
int fd, unbuffered_read;
char *line, *b;
size_t llen;
WORD_LIST *l;
ssize_t n;
line = 0;
llen = 0;
l = list;
do
{
/* for each file */
if (l == 0 || (l->word->word[0] == '-' && l->word->word[1] == '\0'))
fd = 0;
else
fd = open (l->word->word, O_RDONLY);
if (fd < 0)
{
file_error (l->word->word);
return (EXECUTION_FAILURE);
}
#ifndef __CYGWIN__
unbuffered_read = (lseek (fd, 0L, SEEK_CUR) < 0) && (errno == ESPIPE);
#else
unbuffered_read = 1;
#endif
while ((n = zgetline (fd, &line, &llen, '\n', unbuffered_read)) != -1)
{
QUIT;
if (line[n] == '\n')
line[n] = '\0'; /* cutline expects no newline terminator */
cutline (v, line, ops); /* can modify line */
}
if (fd > 0)
close (fd);
QUIT;
if (l)
l = l->next;
}
while (l);
free (line);
return EXECUTION_SUCCESS;
}
#define OPTSET(x) ((cutflags & (x)) ? 1 : 0)
static int
cut_internal (int which, WORD_LIST *list)
{
int opt, rval, cutflags, delim, npos;
char *array_name, *cutstring, *list_arg;
SHELL_VAR *v;
struct cutop op;
struct cutpos *poslist;
v = 0;
rval = EXECUTION_SUCCESS;
cutflags = 0;
array_name = 0;
list_arg = 0;
delim = '\t';
reset_internal_getopt ();
while ((opt = internal_getopt (list, "a:b:c:d:f:sn")) != -1)
{
switch (opt)
{
case 'a':
#if defined (ARRAY_VARS)
array_name = list_optarg;
break;
#else
builtin_error ("arrays not available");
return (EX_USAGE);
#endif
case 'b':
cutflags |= BFLAG;
list_arg = list_optarg;
break;
case 'c':
cutflags |= CFLAG;
list_arg = list_optarg;
break;
case 'd':
cutflags |= DFLAG;
delim = list_optarg[0];
if (delim == 0 || list_optarg[1])
{
builtin_error ("delimiter must be a single non-null character");
return (EX_USAGE);
}
break;
case 'f':
cutflags |= FFLAG;
list_arg = list_optarg;
break;
case 'n':
break;
case 's':
cutflags |= SFLAG;
break;
CASE_HELPOPT;
default:
builtin_usage ();
return (EX_USAGE);
}
}
list = loptend;
if (array_name && (valid_identifier (array_name) == 0))
{
sh_invalidid (array_name);
return (EXECUTION_FAILURE);
}
if (list == 0 && which == 0)
{
builtin_error ("string argument required");
return (EX_USAGE);
}
/* options are mutually exclusive and one is required */
if ((OPTSET (BFLAG) + OPTSET (CFLAG) + OPTSET (FFLAG)) != 1)
{
builtin_usage ();
return (EX_USAGE);
}
if ((npos = getlist (list_arg, &poslist)) < 0)
{
free (poslist);
return (EXECUTION_FAILURE);
}
#if defined (ARRAY_VARS)
if (array_name)
{
v = builtin_find_indexed_array (array_name, 1);
if (v == 0)
{
free (poslist);
return (EXECUTION_FAILURE);
}
}
#endif
op.flags = cutflags;
op.delim = delim;
op.npos = npos;
op.poslist = poslist;
/* we implement cut as a builtin with a cutfile() function that opens each
filename in LIST as a filename (or `-' for stdin) and runs cutline on
every line in the file. */
if (which == 0)
{
cutstring = list->word->word;
if (cutstring == 0 || *cutstring == 0)
{
free (poslist);
return (EXECUTION_SUCCESS);
}
rval = cutline (v, cutstring, &op);
}
else
rval = cutfile (v, list, &op);
free (poslist);
return (rval);
}
int
lcut_builtin (WORD_LIST *list)
{
return (cut_internal (0, list));
}
int
cut_builtin (WORD_LIST *list)
{
return (cut_internal (1, list));
}
char *lcut_doc[] = {
"Extract selected fields from a string.",
"",
"Select portions of LINE (as specified by LIST) and assign them to",
"elements of the indexed array ARRAY starting at index 0, or write",
"them to the standard output if -a is not specified.",
"",
"Items specified by LIST are either column positions or fields delimited",
"by a special character, and are described more completely in cut(1).",
"",
"Columns correspond to bytes (-b), characters (-c), or fields (-f). The",
"field delimiter is specified by -d (default TAB). Column numbering",
"starts at 1.",
(char *)NULL
};
struct builtin lcut_struct = {
"lcut", /* builtin name */
lcut_builtin, /* function implementing the builtin */
BUILTIN_ENABLED, /* initial flags for builtin */
lcut_doc, /* array of long documentation strings. */
"lcut [-a ARRAY] [-b LIST] [-c LIST] [-f LIST] [-d CHAR] [-sn] line", /* usage synopsis; becomes short_doc */
0 /* reserved for internal use */
};
char *cut_doc[] = {
"Extract selected fields from each line of a file.",
"",
"Select portions of each line (as specified by LIST) from each FILE",
"and write them to the standard output. cut reads from the standard",
"input if no FILE arguments are specified or if a FILE argument is a",
"single hyphen.",
"",
"Items specified by LIST are either column positions or fields delimited",
"by a special character, and are described more completely in cut(1).",
"",
"Columns correspond to bytes (-b), characters (-c), or fields (-f). The",
"field delimiter is specified by -d (default TAB). Column numbering",
"starts at 1.",
(char *)NULL
};
struct builtin cut_struct = {
"cut", /* builtin name */
cut_builtin, /* function implementing the builtin */
BUILTIN_ENABLED, /* initial flags for builtin */
cut_doc, /* array of long documentation strings. */
"cut [-a ARRAY] [-b LIST] [-c LIST] [-f LIST] [-d CHAR] [-sn] [file ...]", /* usage synopsis; becomes short_doc */
0 /* reserved for internal use */
};
+4
View File
@@ -5536,6 +5536,10 @@ execute_subshell_builtin_or_function (WORD_LIST *words, REDIRECT *redirects,
if (result == EXITPROG || result == EXITBLTIN)
subshell_exit (last_command_exit_value);
#if 0 /* TAG:bash-5.4 https://savannah.gnu.org/support/?109840 6/5/2025 */
else if (result == ERREXIT)
subshell_exit (last_command_exit_value ? last_command_exit_value : EXECUTION_FAILURE);
#endif
else if (result)
subshell_exit (EXECUTION_FAILURE);
else if (funcvalue)
+1 -1
View File
@@ -1,6 +1,6 @@
/* histexpand.c -- history expansion. */
/* Copyright (C) 1989-2021,2023-2024 Free Software Foundation, Inc.
/* Copyright (C) 1989-2021,2023-2025 Free Software Foundation, Inc.
This file contains the GNU History Library (History), a set of
routines for managing the text of previously typed lines.
+1 -1
View File
@@ -1,6 +1,6 @@
/* history.c -- standalone history library */
/* Copyright (C) 1989-2024 Free Software Foundation, Inc.
/* Copyright (C) 1989-2025 Free Software Foundation, Inc.
This file contains the GNU History Library (History), a set of
routines for managing the text of previously typed lines.
+1 -1
View File
@@ -6,7 +6,7 @@
/* */
/* **************************************************************** */
/* Copyright (C) 1987-2021,2023 Free Software Foundation, Inc.
/* Copyright (C) 1987-2021,2023,2025 Free Software Foundation, Inc.
This file is part of the GNU Readline Library (Readline), a library
for reading lines of text with interactive input and history editing.
+1 -1
View File
@@ -1,7 +1,7 @@
/* readline.c -- a general facility for reading lines of input
with emacs style editing and completion. */
/* Copyright (C) 1987-2024 Free Software Foundation, Inc.
/* Copyright (C) 1987-2025 Free Software Foundation, Inc.
This file is part of the GNU Readline Library (Readline), a library
for reading lines of text with interactive input and history editing.
+1 -1
View File
@@ -1,6 +1,6 @@
/* rlmbutil.h -- utility functions for multibyte characters. */
/* Copyright (C) 2001-2024 Free Software Foundation, Inc.
/* Copyright (C) 2001-2025 Free Software Foundation, Inc.
This file is part of the GNU Readline Library (Readline), a library
for reading lines of text with interactive input and history editing.
+1 -1
View File
@@ -1,7 +1,7 @@
/* rltty.c -- functions to prepare and restore the terminal for readline's
use. */
/* Copyright (C) 1992-2023 Free Software Foundation, Inc.
/* Copyright (C) 1992-2025 Free Software Foundation, Inc.
This file is part of the GNU Readline Library (Readline), a library
for reading lines of text with interactive input and history editing.
+1 -1
View File
@@ -1,7 +1,7 @@
/* rlwinsize.h -- an attempt to isolate some of the system-specific defines
for `struct winsize' and TIOCGWINSZ. */
/* Copyright (C) 1997-2009 Free Software Foundation, Inc.
/* Copyright (C) 1997-2025 Free Software Foundation, Inc.
This file is part of the GNU Readline Library (Readline), a library
for reading lines of text with interactive input and history editing.
+1 -1
View File
@@ -1,6 +1,6 @@
/* search.c - code for non-incremental searching in emacs and vi modes. */
/* Copyright (C) 1992-2024 Free Software Foundation, Inc.
/* Copyright (C) 1992-2025 Free Software Foundation, Inc.
This file is part of the GNU Readline Library (Readline), a library
for reading lines of text with interactive input and history editing.
+1 -1
View File
@@ -1,7 +1,7 @@
/* shell.c -- readline utility functions that are normally provided by
bash when readline is linked as part of the shell. */
/* Copyright (C) 1997-2009,2017,2021 Free Software Foundation, Inc.
/* Copyright (C) 1997-2025 Free Software Foundation, Inc.
This file is part of the GNU Readline Library (Readline), a library
for reading lines of text with interactive input and history editing.
+1 -1
View File
@@ -1,6 +1,6 @@
/* terminal.c -- controlling the terminal with termcap. */
/* Copyright (C) 1996-2023 Free Software Foundation, Inc.
/* Copyright (C) 1996-2025 Free Software Foundation, Inc.
This file is part of the GNU Readline Library (Readline), a library
for reading lines of text with interactive input and history editing.
+1 -1
View File
@@ -1,6 +1,6 @@
/* util.c -- readline utility functions */
/* Copyright (C) 1987-2017 Free Software Foundation, Inc.
/* Copyright (C) 1987-2025 Free Software Foundation, Inc.
This file is part of the GNU Readline Library (Readline), a library
for reading lines of text with interactive input and history editing.
BIN
View File
Binary file not shown.
+487 -998
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+379 -791
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+261 -560
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+784 -1635
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+249 -240
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+260 -261
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+194 -412
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+351 -724
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+387 -802
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+602 -1255
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+498 -1028
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+248 -521
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+318 -684
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+168 -358
View File
File diff suppressed because it is too large Load Diff
+4 -4
View File
@@ -574,13 +574,13 @@ declare -ai a=([0]="0" [1]="16")
3
3
5
/usr/local/build/bash/bash-current/bash: line 1: a[k]: unbound variable
bash: line 1: a[k]: unbound variable
ok 1
/usr/local/build/bash/bash-current/bash: line 1: r0: unbound variable
bash: line 1: r0: unbound variable
ok 2
/usr/local/build/bash/bash-current/bash: line 1: r: unbound variable
bash: line 1: r: unbound variable
ok 3
/usr/local/build/bash/bash-current/bash: line 1: k: unbound variable
bash: line 1: k: unbound variable
ok 4
ok 5
ok 6
+21 -8
View File
@@ -1,12 +1,25 @@
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# issues with nounset and references to nameref variables whose value
# contains an unset variable
$THIS_SH -uc 'a=() k=; "${a[k]}"' || echo ok 1
$THIS_SH -uc 'declare -n r0=b ; : "$r0"' || echo ok 2
$THIS_SH -uc 'a=() k=; declare -n r='a[k]' ; : "$r"' || echo ok 3
$THIS_SH -uc 'declare -n r='a[k]' ; : "$r"' || echo ok 4
$THIS_SH -uc 'a=() k=; "${a[k]}"' bash || echo ok 1
$THIS_SH -uc 'declare -n r0=b ; : "$r0"' bash || echo ok 2
$THIS_SH -uc 'a=() k=; declare -n r='a[k]' ; : "$r"' bash || echo ok 3
$THIS_SH -uc 'declare -n r='a[k]' ; : "$r"' bash || echo ok 4
$THIS_SH -uc 'a=() k=; declare -n r='a[@]' ; : "$r"' && echo ok 5
$THIS_SH -uc 'declare -n r='a[@]' ; : "$r"' && echo ok 6
$THIS_SH -uc 'a=() k=; declare -n r='a[*]' ; : "$r"' && echo ok 7
$THIS_SH -uc 'declare -n r='a[*]' ; : "$r"' && echo ok 8
$THIS_SH -uc 'a=() k=; declare -n r='a[@]' ; : "$r"' bash && echo ok 5
$THIS_SH -uc 'declare -n r='a[@]' ; : "$r"' bash && echo ok 6
$THIS_SH -uc 'a=() k=; declare -n r='a[*]' ; : "$r"' bash && echo ok 7
$THIS_SH -uc 'declare -n r='a[*]' ; : "$r"' bash && echo ok 8