change expansion for key-value pair compound assignment to associative arrays to split all words before identifying keys and values; controlled by a new shopt option: kvpair_split, enabled by default; new `loadassoc' loadable builtin to load an associative array from a set of key-value arguments

This commit is contained in:
Chet Ramey
2026-08-17 10:09:07 -04:00
parent 9c8a70bc9e
commit 2f7eb80c77
38 changed files with 1083 additions and 1012 deletions
+183 -150
View File
@@ -1,9 +1,9 @@
This is bash.info, produced by makeinfo version 7.3 from bashref.texi.
This text is a brief description of the features that are present in the
Bash shell (version 5.3, 9 July 2026).
Bash shell (version 5.3, 14 August 2026).
This is Edition 5.3, last updated 9 July 2026, of The GNU Bash
This is Edition 5.3, last updated 14 August 2026, of The GNU Bash
Reference Manual, for Bash, Version 5.3.
Copyright © 1988-2026 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, 9 July 2026). The Bash home page is
Bash shell (version 5.3, 14 August 2026). The Bash home page is
<http://www.gnu.org/software/bash/>.
This is Edition 5.3, last updated 9 July 2026, of The GNU Bash
This is Edition 5.3, last updated 14 August 2026, of The GNU Bash
Reference Manual, for Bash, Version 5.3.
Bash contains features that appear in other popular shells, and some
@@ -5463,6 +5463,15 @@ This builtin allows you to change additional optional shell behavior.
as in a non-interactive shell. This option is enabled by
default.
kvpair_split
If set, a compound assignment to an associative array performs
word expansions, including word splitting, on all words in the
assignment before identifying keys and values. If it is
unset, each word in the compound assignment list is identified
as a key or value before performing the appropriate word
expansions, and word splitting is not performed. This option
is enabled by default.
lastpipe
If set, and job control is not active, the shell runs the last
command of a pipeline not executed in the background in the
@@ -7340,13 +7349,20 @@ Indexing starts at zero.
When assigning to an associative array, the words in a compound
assignment may be either assignment statements, for which the subscript
is required, or a list of words that is interpreted as a sequence of
alternating keys and values: NAME=(KEY1 VALUE1 KEY2 VALUE2 ... ). These
are treated identically to NAME=( [KEY1]=VALUE1 [KEY2]=VALUE2 ... ).
The first word in the list determines how the remaining words are
alternating keys and values: NAME=(KEY1 VALUE1 KEY2 VALUE2 ... ). The
first word in the list determines how the remaining words are
interpreted; all assignments in a list must be of the same type. When
using key/value pairs, the keys may not be missing or empty; a final
missing value is treated like the empty string.
The kvpair_split option to the shopt builtin (see *note The Shopt
Builtin::) determines how the words in a key/value pair assignment list
are treated. If it is enabled, each word in the list undergoes word
expansions, including word splitting, before the assignment identifies
individual keys and values. If it is unset, the key/value pairs in the
example above are treated identically to NAME=( [KEY1]=VALUE1
[KEY2]=VALUE2 ... ) and expanded appropriately.
This syntax is also accepted by the declare builtin. Individual
array elements may be assigned to using the NAME[SUBSCRIPT]=VALUE
syntax introduced above.
@@ -9780,7 +9796,6 @@ File: bash.info, Node: Commands For History, Next: Commands For Text, Prev: C
non-incremental-reverse-search-history (M-p)
Search backward starting at the current line and moving "up"
through the history as necessary using a non-incremental search for
a string supplied by the user. The search string may match
anywhere in a history line.
@@ -9791,6 +9806,20 @@ File: bash.info, Node: Commands For History, Next: Commands For Text, Prev: C
a string supplied by the user. The search string may match
anywhere in a history line.
non-incremental-reverse-search-history-again ()
Search backward starting at the current line and moving "up"
through the history as necessary using a non-incremental search for
the last non-incremental search string used. If there is no
previous search string, this command returns an error. The search
string may match anywhere in a history line.
non-incremental-forward-search-history-again ()
Search forward starting at the current line and moving "down"
through the history as necessary using a non-incremental search for
the last non-incremental search string used. If there is no
previous search string, this command returns an error. The search
string may match anywhere in a history line.
history-search-backward ()
Search backward through the history for the string of characters
between the start of the current line and the point. The search
@@ -13472,7 +13501,7 @@ D.4 Function Index
* export-completions (): Commands For Completion.
(line 44)
* fetch-history (): Commands For History.
(line 109)
(line 122)
* forward-backward-delete-char (): Commands For Text. (line 23)
* forward-char (C-f): Commands For Moving. (line 14)
* forward-search-history (C-s): Commands For History.
@@ -13489,13 +13518,13 @@ D.4 Function Index
* history-expand-line (M-^): Miscellaneous Commands.
(line 142)
* history-search-backward (): Commands For History.
(line 54)
(line 67)
* history-search-forward (): Commands For History.
(line 61)
* history-substring-search-backward (): Commands For History.
(line 68)
* history-substring-search-forward (): Commands For History.
(line 74)
* history-substring-search-backward (): Commands For History.
(line 81)
* history-substring-search-forward (): Commands For History.
(line 87)
* insert-comment (M-#): Miscellaneous Commands.
(line 59)
* insert-completions (M-*): Commands For Completion.
@@ -13520,11 +13549,15 @@ D.4 Function Index
(line 18)
* next-screen-line (): Commands For Moving. (line 45)
* non-incremental-forward-search-history (M-n): Commands For History.
(line 48)
(line 47)
* non-incremental-forward-search-history-again (): Commands For History.
(line 60)
* non-incremental-reverse-search-history (M-p): Commands For History.
(line 41)
* non-incremental-reverse-search-history-again (): Commands For History.
(line 53)
* operate-and-get-next (C-o): Commands For History.
(line 102)
(line 115)
* overwrite-mode (): Commands For Text. (line 77)
* possible-command-completions (C-x !): Commands For Completion.
(line 111)
@@ -13588,9 +13621,9 @@ D.4 Function Index
* yank (C-y): Commands For Killing.
(line 72)
* yank-last-arg (M-. or M-_): Commands For History.
(line 90)
(line 103)
* yank-nth-arg (M-C-y): Commands For History.
(line 80)
(line 93)
* yank-pop (M-y): Commands For Killing.
(line 75)
@@ -13771,138 +13804,138 @@ D.5 Concept Index

Tag Table:
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 Commands27058
Node: Pipelines27720
Node: Lists30976
Node: Compound Commands32925
Node: Looping Constructs33934
Node: Conditional Constructs36483
Node: Command Grouping51795
Node: Coprocesses53287
Node: GNU Parallel55973
Node: Shell Functions56891
Node: Shell Parameters65339
Node: Positional Parameters70240
Node: Special Parameters71330
Node: Shell Expansions74791
Node: Brace Expansion76980
Node: Tilde Expansion80316
Node: Shell Parameter Expansion83271
Node: Command Substitution104119
Node: Arithmetic Expansion107970
Node: Process Substitution109154
Node: Word Splitting110321
Node: Filename Expansion112765
Node: Pattern Matching115989
Node: Quote Removal121755
Node: Redirections122059
Node: Executing Commands132328
Node: Simple Command Expansion132995
Node: Command Search and Execution135103
Node: Command Execution Environment137547
Node: Environment141073
Node: Exit Status142976
Node: Signals145035
Node: Shell Scripts149983
Node: Shell Builtin Commands153287
Node: Bourne Shell Builtins155628
Node: Bash Builtins182347
Node: Modifying Shell Behavior220082
Node: The Set Builtin220424
Node: The Shopt Builtin232456
Node: Special Builtins249509
Node: Shell Variables250498
Node: Bourne Shell Variables250932
Node: Bash Variables253440
Node: Bash Features292724
Node: Invoking Bash293738
Node: Bash Startup Files300968
Node: Interactive Shells306328
Node: What is an Interactive Shell?306736
Node: Is this Shell Interactive?307398
Node: Interactive Shell Behavior308222
Node: Bash Conditional Expressions311983
Node: Shell Arithmetic317400
Node: Aliases320727
Node: Arrays323861
Node: The Directory Stack331563
Node: Directory Stack Builtins332360
Node: Controlling the Prompt336805
Node: The Restricted Shell339924
Node: Bash POSIX Mode343017
Node: Shell Compatibility Mode362976
Node: Job Control371983
Node: Job Control Basics372440
Node: Job Control Builtins378808
Node: Job Control Variables385596
Node: Command Line Editing386827
Node: Introduction and Notation388530
Node: Readline Interaction390882
Node: Readline Bare Essentials392070
Node: Readline Movement Commands393878
Node: Readline Killing Commands394874
Node: Readline Arguments396897
Node: Searching397987
Node: Readline Init File400230
Node: Readline Init File Syntax401533
Node: Conditional Init Constructs428484
Node: Sample Init File432869
Node: Bindable Readline Commands435989
Node: Commands For Moving437527
Node: Commands For History439991
Node: Commands For Text445384
Node: Commands For Killing449509
Node: Numeric Arguments452297
Node: Commands For Completion453449
Node: Keyboard Macros459145
Node: Miscellaneous Commands459846
Node: Readline vi Mode467389
Node: Programmable Completion468366
Node: Programmable Completion Builtins478102
Node: A Programmable Completion Example489839
Node: Using History Interactively495184
Node: Bash History Facilities495865
Node: Bash History Builtins499600
Node: History Interaction507195
Node: Event Designators512145
Node: Word Designators513723
Node: Modifiers516115
Node: Installing Bash518052
Node: Basic Installation519168
Node: Compilers and Options523044
Node: Compiling For Multiple Architectures523794
Node: Installation Names525547
Node: Specifying the System Type527781
Node: Sharing Defaults528527
Node: Operation Controls529241
Node: Optional Features530260
Node: Reporting Bugs542983
Node: Major Differences From The Bourne Shell544340
Node: GNU Free Documentation License565767
Node: Indexes590944
Node: Builtin Index591395
Node: Reserved Word Index598493
Node: Variable Index600938
Node: Function Index618351
Node: Concept Index632484
Node: Top897
Node: Introduction2834
Node: What is Bash?3047
Node: What is a shell?4180
Node: Definitions6790
Node: Basic Shell Features10117
Node: Shell Syntax11341
Node: Shell Operation12368
Node: Quoting13659
Node: Escape Character14997
Node: Single Quotes15532
Node: Double Quotes15881
Node: ANSI-C Quoting17226
Node: Locale Translation18620
Node: Creating Internationalized Scripts20023
Node: Comments24221
Node: Shell Commands24988
Node: Reserved Words25927
Node: Simple Commands27070
Node: Pipelines27732
Node: Lists30988
Node: Compound Commands32937
Node: Looping Constructs33946
Node: Conditional Constructs36495
Node: Command Grouping51807
Node: Coprocesses53299
Node: GNU Parallel55985
Node: Shell Functions56903
Node: Shell Parameters65351
Node: Positional Parameters70252
Node: Special Parameters71342
Node: Shell Expansions74803
Node: Brace Expansion76992
Node: Tilde Expansion80328
Node: Shell Parameter Expansion83283
Node: Command Substitution104131
Node: Arithmetic Expansion107982
Node: Process Substitution109166
Node: Word Splitting110333
Node: Filename Expansion112777
Node: Pattern Matching116001
Node: Quote Removal121767
Node: Redirections122071
Node: Executing Commands132340
Node: Simple Command Expansion133007
Node: Command Search and Execution135115
Node: Command Execution Environment137559
Node: Environment141085
Node: Exit Status142988
Node: Signals145047
Node: Shell Scripts149995
Node: Shell Builtin Commands153299
Node: Bourne Shell Builtins155640
Node: Bash Builtins182359
Node: Modifying Shell Behavior220094
Node: The Set Builtin220436
Node: The Shopt Builtin232468
Node: Special Builtins250004
Node: Shell Variables250993
Node: Bourne Shell Variables251427
Node: Bash Variables253935
Node: Bash Features293219
Node: Invoking Bash294233
Node: Bash Startup Files301463
Node: Interactive Shells306823
Node: What is an Interactive Shell?307231
Node: Is this Shell Interactive?307893
Node: Interactive Shell Behavior308717
Node: Bash Conditional Expressions312478
Node: Shell Arithmetic317895
Node: Aliases321222
Node: Arrays324356
Node: The Directory Stack332459
Node: Directory Stack Builtins333256
Node: Controlling the Prompt337701
Node: The Restricted Shell340820
Node: Bash POSIX Mode343913
Node: Shell Compatibility Mode363872
Node: Job Control372879
Node: Job Control Basics373336
Node: Job Control Builtins379704
Node: Job Control Variables386492
Node: Command Line Editing387723
Node: Introduction and Notation389426
Node: Readline Interaction391778
Node: Readline Bare Essentials392966
Node: Readline Movement Commands394774
Node: Readline Killing Commands395770
Node: Readline Arguments397793
Node: Searching398883
Node: Readline Init File401126
Node: Readline Init File Syntax402429
Node: Conditional Init Constructs429380
Node: Sample Init File433765
Node: Bindable Readline Commands436885
Node: Commands For Moving438423
Node: Commands For History440887
Node: Commands For Text447044
Node: Commands For Killing451169
Node: Numeric Arguments453957
Node: Commands For Completion455109
Node: Keyboard Macros460805
Node: Miscellaneous Commands461506
Node: Readline vi Mode469049
Node: Programmable Completion470026
Node: Programmable Completion Builtins479762
Node: A Programmable Completion Example491499
Node: Using History Interactively496844
Node: Bash History Facilities497525
Node: Bash History Builtins501260
Node: History Interaction508855
Node: Event Designators513805
Node: Word Designators515383
Node: Modifiers517775
Node: Installing Bash519712
Node: Basic Installation520828
Node: Compilers and Options524704
Node: Compiling For Multiple Architectures525454
Node: Installation Names527207
Node: Specifying the System Type529441
Node: Sharing Defaults530187
Node: Operation Controls530901
Node: Optional Features531920
Node: Reporting Bugs544643
Node: Major Differences From The Bourne Shell546000
Node: GNU Free Documentation License567427
Node: Indexes592604
Node: Builtin Index593055
Node: Reserved Word Index600153
Node: Variable Index602598
Node: Function Index620011
Node: Concept Index634436

End Tag Table