diff --git a/CWRU/CWRU.chlog b/CWRU/CWRU.chlog index 7e5d9371..32d653e1 100644 --- a/CWRU/CWRU.chlog +++ b/CWRU/CWRU.chlog @@ -13183,4 +13183,49 @@ general.h - legal_variable_starter,legal_variable_char: change to use the appropriate CNAME and CNAMESTART flags from sh_syntaxtab[] Report from zheng - + + 8/12 + ---- +subst.c + - parameter_brace_expand: when expanding ${#name}, make sure to cast + the variable passed to legal_variable_starter to unsigned char + Report from otzelot2021@outlook.de + + 8/13 + ---- +config.h.in + - _GL_ATTRIBUTE_CONST: add dummy define for libintl localename + Report from Tianon Gravi + + 8/14 + ---- +examples/loadables/loadassoc.c + - loadassoc: new loadable builtin to populate keys and values in an + associative array from a list of arguments, along the lines of the + suggestion in https://lists.gnu.org/archive/html/bug-bash/2026-01/msg00008.html + (though you'd need to use assoc[@]@k to copy an existing array, so + you get the keys) + +arrayfunc.c + - split_kvpair_assignments: now initialized to 1 (KVPAIR_SPLIT_DEFAULT), + meaning that the entire list is expanded and split before the keys + and values are identified. This is closer to how indexed arrays are + expanded. This means that you can copy an associative array with + copy=( "${assoc[@]@k}" ) + Based on an extensive bug-bash discussion from 12/2025 and 1/2026, + mostly https://lists.gnu.org/archive/html/bug-bash/2025-12/msg00125.html + +config-top.h + - KVPAIR_SPLIT_DEFAULT: default value for kvpair_split_assignments, + initialized to 1 + +arrayfunc.h + - split_kvpair_assignments: new extern declaration + +builtins/shopt.def + - kvpair_split: new shell option to control the value of + kvpair_split_assignments; default is as above + +doc/bash.1,doc/bashref.texi + - kvpair_split: added description to shopt builtin; added paragraph + to Arrays section describing its effect diff --git a/MANIFEST b/MANIFEST index 3980f6a5..f9f052a4 100644 --- a/MANIFEST +++ b/MANIFEST @@ -796,6 +796,7 @@ examples/loadables/chmod.c f examples/loadables/csv.c f examples/loadables/dsv.c f examples/loadables/kv.c f +examples/loadables/loadassoc.c f examples/loadables/cut.c f examples/loadables/ocut.c f examples/loadables/logname.c f diff --git a/Makefile.in b/Makefile.in index 1ac0ba3b..ae70ef69 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,4 +1,4 @@ -# Makefile for bash-5.3, version 5.12 +# Makefile for bash-5.4, version 5.12 # # Copyright (C) 1996-2026 Free Software Foundation, Inc. diff --git a/aclocal.m4 b/aclocal.m4 index 934b325f..6e3ddda9 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -3,7 +3,7 @@ dnl Bash specific tests dnl dnl Some derived from PDKSH 5.1.3 autoconf tests dnl -dnl Copyright (C) 1987-2025 Free Software Foundation, Inc. +dnl Copyright (C) 1987-2026 Free Software Foundation, Inc. dnl dnl diff --git a/arrayfunc.c b/arrayfunc.c index aac26784..a4495b6d 100644 --- a/arrayfunc.c +++ b/arrayfunc.c @@ -1,6 +1,6 @@ /* arrayfunc.c -- High-level array functions used by other parts of the shell. */ -/* Copyright (C) 2001-2025 Free Software Foundation, Inc. +/* Copyright (C) 2001-2026 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -641,7 +641,7 @@ expand_compound_array_assignment (SHELL_VAR *var, char *value, int flags) #if ASSOC_KVPAIR_ASSIGNMENT /* If non-zero, we split the words in kv-pair compound array assignments in addition to performing the other expansions. */ -int split_kvpair_assignments = 0; +int split_kvpair_assignments = KVPAIR_SPLIT_DEFAULT; /* We have a set of key-value pairs that should be expanded and split (because they are not assignment statements). They are not expanded @@ -665,12 +665,14 @@ assign_assoc_from_kvlist (SHELL_VAR *var, WORD_LIST *nlist, HASH_TABLE *h, int f akey = split_kvpair_assignments ? savestring (k) : expand_subscript_string (k, 0); if (akey == 0 || *akey == 0) { - err_badarraysub (k); + const char *kmsg = "\"\""; /* make it look better */ + + err_badarraysub (kmsg); FREE (akey); continue; } - aval = split_kvpair_assignments ? savestring (v) : expand_assignment_string_to_string (v, 0); + aval = split_kvpair_assignments ? (v ? savestring (v) : 0) : expand_assignment_string_to_string (v, 0); if (aval == 0) { aval = (char *)xmalloc (1); diff --git a/arrayfunc.h b/arrayfunc.h index 41e4b079..7c987e77 100644 --- a/arrayfunc.h +++ b/arrayfunc.h @@ -52,6 +52,11 @@ typedef struct element_state more than once, when performing variable expansion. */ extern int array_expand_once; +/* This means to split the words in a compound associative array assignment + before the keys and values are identified, so the expanded and split words + can be used as separate keys and values. */ +extern int split_kvpair_assignments; + /* Flags for array_value_internal and callers array_value/get_array_value; also used by array_variable_name and array_variable_part. */ #define AV_ALLOWALL 0x001 /* treat a[@] like $@ and a[*] like $* */ diff --git a/builtins/printf.def b/builtins/printf.def index efae6122..effd91ac 100644 --- a/builtins/printf.def +++ b/builtins/printf.def @@ -45,8 +45,12 @@ in printf(3), printf interprets: %(fmt)T output the date-time string resulting from using FMT as a format string for strftime(3) +Like printf(3), printf can reference arguments in non-sequential order. +A format specifier %N$, where N is a decimal integer greater than 0, +refers to the Nth argument supplied to printf. + The format is re-used as necessary to consume all of the arguments. If -there are fewer arguments than the format requires, extra format +there are fewer arguments than the format requires, extra format specifications behave as if a zero value or null string, as appropriate, had been supplied. diff --git a/builtins/shopt.def b/builtins/shopt.def index ed057e63..cbc90932 100644 --- a/builtins/shopt.def +++ b/builtins/shopt.def @@ -123,6 +123,7 @@ extern int debugging_mode; #if defined (ARRAY_VARS) extern int array_expand_once; int expand_once_flag; +extern int kvpair_split_assignments; #endif #if defined (SYSLOG_HISTORY) @@ -235,6 +236,9 @@ static struct { { "huponexit", &hup_on_exit, (shopt_set_func_t *)NULL }, { "inherit_errexit", &inherit_errexit, (shopt_set_func_t *)NULL }, { "interactive_comments", &interactive_comments, set_shellopts_after_change }, +#if defined (ARRAY_VARS) + { "kvpair_split", &split_kvpair_assignments, (shopt_set_func_t *)NULL }, +#endif { "lastpipe", &lastpipe_opt, (shopt_set_func_t *)NULL }, #if defined (HISTORY) { "lithist", &literal_history, (shopt_set_func_t *)NULL }, diff --git a/config-top.h b/config-top.h index c47ab01b..631c4ef0 100644 --- a/config-top.h +++ b/config-top.h @@ -1,6 +1,6 @@ /* config-top.h - various user-settable options not under the control of autoconf. */ -/* Copyright (C) 2002-2024 Free Software Foundation, Inc. +/* Copyright (C) 2002-2026 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -195,6 +195,10 @@ assignment using a compound list of key-value pairs. */ #define ASSOC_KVPAIR_ASSIGNMENT 1 +/* Define to 1 to perform word splitting on the words in an associative array + compound assignment that has been identified as a kvpair assignment. */ +#define KVPAIR_SPLIT_DEFAULT 1 + /* Define if you want read errors in non-interactive shells to be fatal errors instead of the historical practice of treating them as EOF. The next version of POSIX will require this (interp 1629). */ diff --git a/config.h.in b/config.h.in index cab07dcc..f91f5c86 100644 --- a/config.h.in +++ b/config.h.in @@ -1,6 +1,6 @@ /* config.h -- Configuration file for bash. */ -/* Copyright (C) 1987-2009,2011-2012,2013-2024 Free Software Foundation, Inc. +/* Copyright (C) 1987-2009,2011-2012,2013-2026 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -1243,10 +1243,12 @@ #undef HAVE_WEAK_SYMBOLS +#define _GL_ATTRIBUTE_CONST #define _GL_ATTRIBUTE_MALLOC #define _GL_ATTRIBUTE_DEALLOC_FREE #define _GL_ATTRIBUTE_FALLTHROUGH #define _GL_ATTRIBUTE_PURE + #define _GL_UNUSED #define _GL_INLINE_HEADER_BEGIN diff --git a/doc/bash.0 b/doc/bash.0 index d1d1bbcd..d8bdac6b 100644 --- a/doc/bash.0 +++ b/doc/bash.0 @@ -1615,8 +1615,7 @@ PPAARRAAMMEETTEERRSS is also accepted; the _s_u_b_s_c_r_i_p_t is ignored. Associative arrays are created using - ddeeccllaarree --AA _n_a_m_e - . + ddeeccllaarree --AA _n_a_m_e . Attributes may be specified for an array variable using the ddeeccllaarree and rreeaaddoonnllyy builtins. Each attribute applies to all members of an array. @@ -1637,13 +1636,20 @@ PPAARRAAMMEETTEERRSS 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: _n_a_m_e=(( _k_e_y_1 _v_a_l_u_e_1 _k_e_y_2 _v_a_l_u_e_2 ...)). These are treated identi- - cally to _n_a_m_e=(( [_k_e_y_1]=_v_a_l_u_e_1 [_k_e_y_2]=_v_a_l_u_e_2 ...)). The first word in the + and values: _n_a_m_e=(( _k_e_y_1 _v_a_l_u_e_1 _k_e_y_2 _v_a_l_u_e_2 ...)). 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 kkvvppaaiirr__sspplliitt option to the sshhoopptt builtin (see SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS + below) determines how the words in a key/value pair assignment list are + treated. If it is enabled, each word in the list undergoes word expan- + sions, including word splitting, before the assignment identifies individ- + ual keys and values. If it is unset, the key/value pairs in the example + above are treated identically to _n_a_m_e=(( [_k_e_y_1]=_v_a_l_u_e_1 [_k_e_y_2]=_v_a_l_u_e_2 ...)) + and expanded appropriately. + This syntax is also accepted by the ddeeccllaarree builtin. Individual array ele- ments may be assigned to using the _n_a_m_e[_s_u_b_s_c_r_i_p_t]=_v_a_l_u_e syntax introduced above. @@ -3692,186 +3698,186 @@ RREEAADDLLIINNEE prefix of the set of possible completions using a different color. The color definitions are taken from the value of the LLSS__CCOOLLOORRSS en- vironment variable. If there is a color definition in $$LLSS__CCOOLLOORRSS - for the custom suffix ".readline-colored-completion-prefix", rreeaadd-- - lliinnee uses this color for the common prefix instead of its default. + for the custom suffix "readline-colored-completion-prefix", rreeaaddlliinnee + uses this color for the common prefix instead of its default. ccoolloorreedd--ssttaattss ((OOffff)) If set to OOnn, rreeaaddlliinnee displays possible completions using different colors to indicate their file type. The color definitions are taken from the value of the LLSS__CCOOLLOORRSS environment variable. ccoommmmeenntt--bbeeggiinn (("##")) - The string that the rreeaaddlliinnee iinnsseerrtt--ccoommmmeenntt command inserts. This + The string that the rreeaaddlliinnee iinnsseerrtt--ccoommmmeenntt command inserts. This command is bound to MM--## in emacs mode and to ## in vi command mode. ccoommpplleettiioonn--ddiissppllaayy--wwiiddtthh ((--11)) - The number of screen columns used to display possible matches when + The number of screen columns used to display possible matches when performing completion. The value is ignored if it is less than 0 or greater than the terminal screen width. A value of 0 causes matches to be displayed one per line. The default value is -1. ccoommpplleettiioonn--iiggnnoorree--ccaassee ((OOffff)) - If set to OOnn, rreeaaddlliinnee performs filename matching and completion in + If set to OOnn, rreeaaddlliinnee performs filename matching and completion in a case-insensitive fashion. ccoommpplleettiioonn--mmaapp--ccaassee ((OOffff)) If set to OOnn, and ccoommpplleettiioonn--iiggnnoorree--ccaassee is enabled, rreeaaddlliinnee treats - hyphens (_-) and underscores (__) as equivalent when performing + hyphens (_-) and underscores (__) as equivalent when performing case-insensitive filename matching and completion. ccoommpplleettiioonn--pprreeffiixx--ddiissppllaayy--lleennggtthh ((00)) - The maximum length in characters of the common prefix of a list of - possible completions that is displayed without modification. When - set to a value greater than zero, rreeaaddlliinnee replaces common prefixes - longer than this value with an ellipsis when displaying possible - completions. If a completion begins with a period, and eeaaddlliinnee is + The maximum length in characters of the common prefix of a list of + possible completions that is displayed without modification. When + set to a value greater than zero, rreeaaddlliinnee replaces common prefixes + longer than this value with an ellipsis when displaying possible + completions. If a completion begins with a period, and eeaaddlliinnee is completing filenames, it uses three underscores instead of an ellip- sis. ccoommpplleettiioonn--qquueerryy--iitteemmss ((110000)) This determines when the user is queried about viewing the number of - possible completions generated by the ppoossssiibbllee--ccoommpplleettiioonnss command. - It may be set to any integer value greater than or equal to zero. - If the number of possible completions is greater than or equal to - the value of this variable, rreeaaddlliinnee asks whether or not the user - wishes to view them; otherwise rreeaaddlliinnee simply lists them on the - terminal. A zero value means rreeaaddlliinnee should never ask; negative + possible completions generated by the ppoossssiibbllee--ccoommpplleettiioonnss command. + It may be set to any integer value greater than or equal to zero. + If the number of possible completions is greater than or equal to + the value of this variable, rreeaaddlliinnee asks whether or not the user + wishes to view them; otherwise rreeaaddlliinnee simply lists them on the + terminal. A zero value means rreeaaddlliinnee should never ask; negative values are treated as zero. ccoonnvveerrtt--mmeettaa ((OOnn)) - If set to OOnn, rreeaaddlliinnee converts characters it reads that have the - eighth bit set to an ASCII key sequence by clearing the eighth bit - and prefixing it with an escape character (converting the character - to have the meta prefix). The default is _O_n, but rreeaaddlliinnee sets it + If set to OOnn, rreeaaddlliinnee converts characters it reads that have the + eighth bit set to an ASCII key sequence by clearing the eighth bit + and prefixing it with an escape character (converting the character + to have the meta prefix). The default is _O_n, but rreeaaddlliinnee sets it to _O_f_f if the locale contains characters whose encodings may include - bytes with the eighth bit set. This variable is dependent on the - LLCC__CCTTYYPPEE locale category, and may change if the locale changes. - This variable also affects key bindings; see the description of + bytes with the eighth bit set. This variable is dependent on the + LLCC__CCTTYYPPEE locale category, and may change if the locale changes. + This variable also affects key bindings; see the description of ffoorrccee--mmeettaa--pprreeffiixx below. ddiissaabbllee--ccoommpplleettiioonn ((OOffff)) If set to OOnn, rreeaaddlliinnee inhibits word completion. Completion charac- - ters are inserted into the line as if they had been mapped to sseellff-- + ters are inserted into the line as if they had been mapped to sseellff-- iinnsseerrtt. eecchhoo--ccoonnttrrooll--cchhaarraacctteerrss ((OOnn)) - When set to OOnn, on operating systems that indicate they support it, + When set to OOnn, on operating systems that indicate they support it, rreeaaddlliinnee echoes a character corresponding to a signal generated from the keyboard. eeddiittiinngg--mmooddee ((eemmaaccss)) - Controls whether rreeaaddlliinnee uses a set of key bindings similar to + Controls whether rreeaaddlliinnee uses a set of key bindings similar to _E_m_a_c_s or _v_i. eeddiittiinngg--mmooddee can be set to either eemmaaccss or vvii. eemmaaccss--mmooddee--ssttrriinngg ((@@)) - If the _s_h_o_w_-_m_o_d_e_-_i_n_-_p_r_o_m_p_t variable is enabled, this string is dis- - played immediately before the last line of the primary prompt when - emacs editing mode is active. The value is expanded like a key - binding, so the standard set of meta- and control- prefixes and - backslash escape sequences is available. The \1 and \2 escapes be- - gin and end sequences of non-printing characters, which can be used + If the _s_h_o_w_-_m_o_d_e_-_i_n_-_p_r_o_m_p_t variable is enabled, this string is dis- + played immediately before the last line of the primary prompt when + emacs editing mode is active. The value is expanded like a key + binding, so the standard set of meta- and control- prefixes and + backslash escape sequences is available. The \1 and \2 escapes be- + gin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. eennaabbllee--aaccttiivvee--rreeggiioonn ((OOnn)) When this variable is set to _O_n, rreeaaddlliinnee allows certain commands to designate the region as _a_c_t_i_v_e. When the region is active, rreeaaddlliinnee - highlights the text in the region using the value of the aaccttiivvee--rree-- + highlights the text in the region using the value of the aaccttiivvee--rree-- ggiioonn--ssttaarrtt--ccoolloorr variable, which defaults to the string that enables - the terminal's standout mode. The active region shows the text in- + the terminal's standout mode. The active region shows the text in- serted by bracketed-paste and any matching text found by incremental and non-incremental history searches. eennaabbllee--bbrraacckkeetteedd--ppaassttee ((OOnn)) - When set to OOnn, rreeaaddlliinnee configures the terminal to insert each - paste into the editing buffer as a single string of characters, in- - stead of treating each character as if it had been read from the + When set to OOnn, rreeaaddlliinnee configures the terminal to insert each + paste into the editing buffer as a single string of characters, in- + stead of treating each character as if it had been read from the keyboard. This is called _b_r_a_c_k_e_t_e_d_-_p_a_s_t_e _m_o_d_e; it prevents rreeaaddlliinnee from executing any editing commands bound to key sequences appearing in the pasted text. eennaabbllee--kkeeyyppaadd ((OOffff)) - When set to OOnn, rreeaaddlliinnee tries to enable the application keypad + When set to OOnn, rreeaaddlliinnee tries to enable the application keypad when it is called. Some systems need this to enable the arrow keys. eennaabbllee--mmeettaa--kkeeyy ((OOnn)) - When set to OOnn, rreeaaddlliinnee tries to enable any meta modifier key the + When set to OOnn, rreeaaddlliinnee tries to enable any meta modifier key the terminal claims to support. On many terminals, the Meta key is used - to send eight-bit characters; this variable checks for the terminal + to send eight-bit characters; this variable checks for the terminal capability that indicates the terminal can enable and disable a mode - that sets the eighth bit of a character (0200) if the Meta key is + that sets the eighth bit of a character (0200) if the Meta key is held down when the character is typed (a meta character). eexxppaanndd--ttiillddee ((OOffff)) - If set to OOnn, rreeaaddlliinnee performs tilde expansion when it attempts + If set to OOnn, rreeaaddlliinnee performs tilde expansion when it attempts word completion. ffoorrccee--mmeettaa--pprreeffiixx ((OOffff)) - If set to OOnn, rreeaaddlliinnee modifies its behavior when binding key se- + If set to OOnn, rreeaaddlliinnee modifies its behavior when binding key se- quences containing \M- or Meta- (see KKeeyy BBiinnddiinnggss above) by convert- - ing a key sequence of the form \M-_C or Meta-_C to the two-character - sequence EESSCC _C (adding the meta prefix). If ffoorrccee--mmeettaa--pprreeffiixx is - set to OOffff (the default), rreeaaddlliinnee uses the value of the ccoonn-- - vveerrtt--mmeettaa variable to determine whether to perform this conversion: - if ccoonnvveerrtt--mmeettaa is OOnn, rreeaaddlliinnee performs the conversion described + ing a key sequence of the form \M-_C or Meta-_C to the two-character + sequence EESSCC _C (adding the meta prefix). If ffoorrccee--mmeettaa--pprreeffiixx is + set to OOffff (the default), rreeaaddlliinnee uses the value of the ccoonn-- + vveerrtt--mmeettaa variable to determine whether to perform this conversion: + if ccoonnvveerrtt--mmeettaa is OOnn, rreeaaddlliinnee performs the conversion described above; if it is OOffff, rreeaaddlliinnee converts _C to a meta character by set- ting the eighth bit (0200). hhiissttoorryy--pprreesseerrvvee--ppooiinntt ((OOffff)) - If set to OOnn, the history code attempts to place point at the same - location on each history line retrieved with pprreevviioouuss--hhiissttoorryy or + If set to OOnn, the history code attempts to place point at the same + location on each history line retrieved with pprreevviioouuss--hhiissttoorryy or nneexxtt--hhiissttoorryy. hhiissttoorryy--ssiizzee ((uunnsseett)) Set the maximum number of history entries saved in the history list. - If set to zero, any existing history entries are deleted and no new - entries are saved. If set to a value less than zero, the number of - history entries is not limited. By default, bbaasshh sets the maximum - number of history entries to the value of the HHIISSTTSSIIZZEE shell vari- + If set to zero, any existing history entries are deleted and no new + entries are saved. If set to a value less than zero, the number of + history entries is not limited. By default, bbaasshh sets the maximum + number of history entries to the value of the HHIISSTTSSIIZZEE shell vari- able. Setting _h_i_s_t_o_r_y_-_s_i_z_e to a non-numeric value will set the max- imum number of history entries to 500. hhoorriizzoonnttaall--ssccrroollll--mmooddee ((OOffff)) - Setting this variable to OOnn makes rreeaaddlliinnee use a single line for - display, scrolling the input horizontally on a single screen line + Setting this variable to OOnn makes rreeaaddlliinnee use a single line for + display, scrolling the input horizontally on a single screen line when it becomes longer than the screen width rather than wrapping to - a new line. This setting is automatically enabled for terminals of + a new line. This setting is automatically enabled for terminals of height 1. iinnppuutt--mmeettaa ((OOffff)) If set to OOnn, rreeaaddlliinnee enables eight-bit input (that is, it does not clear the eighth bit in the characters it reads), regardless of what - the terminal claims it can support. The default is _O_f_f, but rreeaadd-- + the terminal claims it can support. The default is _O_f_f, but rreeaadd-- lliinnee sets it to _O_n if the locale contains characters whose encodings - may include bytes with the eighth bit set. This variable is depen- - dent on the LLCC__CCTTYYPPEE locale category, and its value may change if + may include bytes with the eighth bit set. This variable is depen- + dent on the LLCC__CCTTYYPPEE locale category, and its value may change if the locale changes. The name mmeettaa--ffllaagg is a synonym for iinnppuutt--mmeettaa. iisseeaarrcchh--tteerrmmiinnaattoorrss (("CC--[[CC--jj")) The string of characters that should terminate an incremental search - without subsequently executing the character as a command. If this + without subsequently executing the character as a command. If this variable has not been given a value, the characters _E_S_C and CC--jj ter- minate an incremental search. kkeeyymmaapp ((eemmaaccss)) - Set the current rreeaaddlliinnee keymap. The set of valid keymap names is - _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_c_o_m_m_a_n_d, and - _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d; _e_m_a_c_s is equivalent to - _e_m_a_c_s_-_s_t_a_n_d_a_r_d. The default value is _e_m_a_c_s; the value of eeddiitt-- + Set the current rreeaaddlliinnee keymap. The set of valid keymap names is + _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_c_o_m_m_a_n_d, and + _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d; _e_m_a_c_s is equivalent to + _e_m_a_c_s_-_s_t_a_n_d_a_r_d. The default value is _e_m_a_c_s; the value of eeddiitt-- iinngg--mmooddee also affects the default keymap. kkeeyysseeqq--ttiimmeeoouutt ((550000)) Specifies the duration rreeaaddlliinnee will wait for a character when read- - ing an ambiguous key sequence (one that can form a complete key se- - quence using the input read so far, or can take additional input to - complete a longer key sequence). If rreeaaddlliinnee does not receive any - input within the timeout, it uses the shorter but complete key se- - quence. The value is specified in milliseconds, so a value of 1000 - means that rreeaaddlliinnee will wait one second for additional input. If - this variable is set to a value less than or equal to zero, or to a - non-numeric value, rreeaaddlliinnee waits until another key is pressed to + ing an ambiguous key sequence (one that can form a complete key se- + quence using the input read so far, or can take additional input to + complete a longer key sequence). If rreeaaddlliinnee does not receive any + input within the timeout, it uses the shorter but complete key se- + quence. The value is specified in milliseconds, so a value of 1000 + means that rreeaaddlliinnee will wait one second for additional input. If + this variable is set to a value less than or equal to zero, or to a + non-numeric value, rreeaaddlliinnee waits until another key is pressed to decide which key sequence to complete. mmaarrkk--ddiirreeccttoorriieess ((OOnn)) If set to OOnn, completed directory names have a slash appended. mmaarrkk--mmooddiiffiieedd--lliinneess ((OOffff)) - If set to OOnn, rreeaaddlliinnee displays history lines that have been modi- + If set to OOnn, rreeaaddlliinnee displays history lines that have been modi- fied with a preceding asterisk (**). mmaarrkk--ssyymmlliinnkkeedd--ddiirreeccttoorriieess ((OOffff)) - If set to OOnn, completed names which are symbolic links to directo- - ries have a slash appended, subject to the value of mmaarrkk--ddiirreeccttoo-- + If set to OOnn, completed names which are symbolic links to directo- + ries have a slash appended, subject to the value of mmaarrkk--ddiirreeccttoo-- rriieess. mmaattcchh--hhiiddddeenn--ffiilleess ((OOnn)) - This variable, when set to OOnn, forces rreeaaddlliinnee to match files whose + This variable, when set to OOnn, forces rreeaaddlliinnee to match files whose names begin with a "." (hidden files) when performing filename com- - pletion. If set to OOffff, the user must include the leading "." in + pletion. If set to OOffff, the user must include the leading "." in the filename to be completed. mmeennuu--ccoommpplleettee--ddiissppllaayy--pprreeffiixx ((OOffff)) If set to OOnn, menu completion displays the common prefix of the list - of possible completions (which may be empty) before cycling through + of possible completions (which may be empty) before cycling through the list. oouuttppuutt--mmeettaa ((OOffff)) - If set to OOnn, rreeaaddlliinnee displays characters with the eighth bit set - directly rather than as a meta-prefixed escape sequence. The de- - fault is _O_f_f, but rreeaaddlliinnee sets it to _O_n if the locale contains - characters whose encodings may include bytes with the eighth bit - set. This variable is dependent on the LLCC__CCTTYYPPEE locale category, + If set to OOnn, rreeaaddlliinnee displays characters with the eighth bit set + directly rather than as a meta-prefixed escape sequence. The de- + fault is _O_f_f, but rreeaaddlliinnee sets it to _O_n if the locale contains + characters whose encodings may include bytes with the eighth bit + set. This variable is dependent on the LLCC__CCTTYYPPEE locale category, and its value may change if the locale changes. ppaaggee--ccoommpplleettiioonnss ((OOnn)) - If set to OOnn, rreeaaddlliinnee uses an internal pager resembling _m_o_r_e(1) to + If set to OOnn, rreeaaddlliinnee uses an internal pager resembling _m_o_r_e(1) to display a screenful of possible completions at a time. pprreeffeerr--vviissiibbllee--bbeellll See bbeellll--ssttyyllee. @@ -3881,92 +3887,92 @@ RREEAADDLLIINNEE rreevveerrtt--aallll--aatt--nneewwlliinnee ((OOffff)) If set to OOnn, rreeaaddlliinnee will undo all changes to history lines before returning when executing aacccceepptt--lliinnee. By default, history lines may - be modified and retain individual undo lists across calls to rreeaadd-- + be modified and retain individual undo lists across calls to rreeaadd-- lliinnee. sseeaarrcchh--iiggnnoorree--ccaassee ((OOffff)) If set to OOnn, rreeaaddlliinnee performs incremental and non-incremental his- tory list searches in a case-insensitive fashion. sshhooww--aallll--iiff--aammbbiigguuoouuss ((OOffff)) - This alters the default behavior of the completion functions. If - set to OOnn, words which have more than one possible completion cause + This alters the default behavior of the completion functions. If + set to OOnn, words which have more than one possible completion cause the matches to be listed immediately instead of ringing the bell. sshhooww--aallll--iiff--uunnmmooddiiffiieedd ((OOffff)) - This alters the default behavior of the completion functions in a + This alters the default behavior of the completion functions in a fashion similar to sshhooww--aallll--iiff--aammbbiigguuoouuss. If set to OOnn, words which - have more than one possible completion without any possible partial - completion (the possible completions don't share a common prefix) - cause the matches to be listed immediately instead of ringing the + have more than one possible completion without any possible partial + completion (the possible completions don't share a common prefix) + cause the matches to be listed immediately instead of ringing the bell. sshhooww--mmooddee--iinn--pprroommpptt ((OOffff)) If set to OOnn, add a string to the beginning of the prompt indicating - the editing mode: emacs, vi command, or vi insertion. The mode + the editing mode: emacs, vi command, or vi insertion. The mode strings are user-settable (e.g., _e_m_a_c_s_-_m_o_d_e_-_s_t_r_i_n_g). sskkiipp--ccoommpplleetteedd--tteexxtt ((OOffff)) - If set to OOnn, this alters the default completion behavior when in- - serting a single match into the line. It's only active when per- - forming completion in the middle of a word. If enabled, rreeaaddlliinnee + If set to OOnn, this alters the default completion behavior when in- + serting a single match into the line. It's only active when per- + forming completion in the middle of a word. If enabled, rreeaaddlliinnee does not insert characters from the completion that match characters - after point in the word being completed, so portions of the word + after point in the word being completed, so portions of the word following the cursor are not duplicated. vvii--ccmmdd--mmooddee--ssttrriinngg ((((ccmmdd)))) - If the _s_h_o_w_-_m_o_d_e_-_i_n_-_p_r_o_m_p_t variable is enabled, this string is dis- - played immediately before the last line of the primary prompt when - vi editing mode is active and in command mode. The value is ex- - panded like a key binding, so the standard set of meta- and control- - prefixes and backslash escape sequences is available. The \1 and \2 - escapes begin and end sequences of non-printing characters, which - can be used to embed a terminal control sequence into the mode - string. - vvii--iinnss--mmooddee--ssttrriinngg ((((iinnss)))) If the _s_h_o_w_-_m_o_d_e_-_i_n_-_p_r_o_m_p_t variable is enabled, this string is dis- played immediately before the last line of the primary prompt when - vi editing mode is active and in insertion mode. The value is ex- + vi editing mode is active and in command mode. The value is ex- panded like a key binding, so the standard set of meta- and control- prefixes and backslash escape sequences is available. The \1 and \2 escapes begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. + vvii--iinnss--mmooddee--ssttrriinngg ((((iinnss)))) + If the _s_h_o_w_-_m_o_d_e_-_i_n_-_p_r_o_m_p_t variable is enabled, this string is dis- + played immediately before the last line of the primary prompt when + vi editing mode is active and in insertion mode. The value is ex- + panded like a key binding, so the standard set of meta- and control- + prefixes and backslash escape sequences is available. The \1 and \2 + escapes begin and end sequences of non-printing characters, which + can be used to embed a terminal control sequence into the mode + string. vviissiibbllee--ssttaattss ((OOffff)) - If set to OOnn, a character denoting a file's type as reported by - _s_t_a_t(2) is appended to the filename when listing possible comple- + If set to OOnn, a character denoting a file's type as reported by + _s_t_a_t(2) is appended to the filename when listing possible comple- tions. RReeaaddlliinnee CCoonnddiittiioonnaall CCoonnssttrruuccttss - RReeaaddlliinnee implements a facility similar in spirit to the conditional compi- - lation features of the C preprocessor which allows key bindings and vari- - able settings to be performed as the result of tests. There are four + RReeaaddlliinnee implements a facility similar in spirit to the conditional compi- + lation features of the C preprocessor which allows key bindings and vari- + able settings to be performed as the result of tests. There are four parser directives available. - $$iiff The $$iiff construct allows bindings to be made based on the editing - mode, the terminal being used, or the application using rreeaaddlliinnee. - The text of the test, after any comparison operator, extends to the - end of the line; unless otherwise noted, no characters are required + $$iiff The $$iiff construct allows bindings to be made based on the editing + mode, the terminal being used, or the application using rreeaaddlliinnee. + The text of the test, after any comparison operator, extends to the + end of the line; unless otherwise noted, no characters are required to isolate it. - mmooddee The mmooddee== form of the $$iiff directive is used to test whether - rreeaaddlliinnee is in emacs or vi mode. This may be used in con- - junction with the sseett kkeeyymmaapp command, for instance, to set + mmooddee The mmooddee== form of the $$iiff directive is used to test whether + rreeaaddlliinnee is in emacs or vi mode. This may be used in con- + junction with the sseett kkeeyymmaapp command, for instance, to set bindings in the _e_m_a_c_s_-_s_t_a_n_d_a_r_d and _e_m_a_c_s_-_c_t_l_x keymaps only if rreeaaddlliinnee is starting out in emacs mode. - tteerrmm The tteerrmm== form may be used to include terminal-specific key - bindings, perhaps to bind the key sequences output by the - terminal's function keys. The word on the right side of the - == is tested against both the full name of the terminal and - the portion of the terminal name before the first --. This - allows _x_t_e_r_m to match both _x_t_e_r_m and _x_t_e_r_m_-_2_5_6_c_o_l_o_r, for in- + tteerrmm The tteerrmm== form may be used to include terminal-specific key + bindings, perhaps to bind the key sequences output by the + terminal's function keys. The word on the right side of the + == is tested against both the full name of the terminal and + the portion of the terminal name before the first --. This + allows _x_t_e_r_m to match both _x_t_e_r_m and _x_t_e_r_m_-_2_5_6_c_o_l_o_r, for in- stance. vveerrssiioonn - The vveerrssiioonn test may be used to perform comparisons against - specific rreeaaddlliinnee versions. The vveerrssiioonn expands to the cur- - rent rreeaaddlliinnee version. The set of comparison operators in- + The vveerrssiioonn test may be used to perform comparisons against + specific rreeaaddlliinnee versions. The vveerrssiioonn expands to the cur- + rent rreeaaddlliinnee version. The set of comparison operators in- cludes ==, (and ====), !!==, <<==, >>==, <<, and >>. The version number - supplied on the right side of the operator consists of a ma- - jor version number, an optional decimal point, and an op- - tional minor version (e.g., 77..11). If the minor version is - omitted, it defaults to 00. The operator may be separated - from the string vveerrssiioonn and from the version number argument + supplied on the right side of the operator consists of a ma- + jor version number, an optional decimal point, and an op- + tional minor version (e.g., 77..11). If the minor version is + omitted, it defaults to 00. The operator may be separated + from the string vveerrssiioonn and from the version number argument by whitespace. _a_p_p_l_i_c_a_t_i_o_n @@ -3974,8 +3980,8 @@ RREEAADDLLIINNEE cific settings. Each program using the rreeaaddlliinnee library sets the _a_p_p_l_i_c_a_t_i_o_n _n_a_m_e, and an initialization file can test for a particular value. This could be used to bind key sequences - to functions useful for a specific program. For instance, - the following command adds a key sequence that quotes the + to functions useful for a specific program. For instance, + the following command adds a key sequence that quotes the current or previous word in bbaasshh: $$iiff Bash @@ -3984,83 +3990,83 @@ RREEAADDLLIINNEE $$eennddiiff _v_a_r_i_a_b_l_e - The _v_a_r_i_a_b_l_e construct provides simple equality tests for - rreeaaddlliinnee variables and values. The permitted comparison op- - erators are _=, _=_=, and _!_=. The variable name must be sepa- - rated from the comparison operator by whitespace; the opera- + The _v_a_r_i_a_b_l_e construct provides simple equality tests for + rreeaaddlliinnee variables and values. The permitted comparison op- + erators are _=, _=_=, and _!_=. The variable name must be sepa- + rated from the comparison operator by whitespace; the opera- tor may be separated from the value on the right hand side by - whitespace. String and boolean variables may be tested. - Boolean variables must be tested against the values _o_n and + whitespace. String and boolean variables may be tested. + Boolean variables must be tested against the values _o_n and _o_f_f. - $$eellssee Commands in this branch of the $$iiff directive are executed if the + $$eellssee Commands in this branch of the $$iiff directive are executed if the test fails. $$eennddiiff - This command, as seen in the previous example, terminates an $$iiff + This command, as seen in the previous example, terminates an $$iiff command. $$iinncclluuddee This directive takes a single filename as an argument and reads com- - mands and key bindings from that file. For example, the following + mands and key bindings from that file. For example, the following directive would read _/_e_t_c_/_i_n_p_u_t_r_c: $$iinncclluuddee _/_e_t_c_/_i_n_p_u_t_r_c SSeeaarrcchhiinngg - RReeaaddlliinnee provides commands for searching through the command history (see - HHIISSTTOORRYY below) for lines containing a specified string. There are two + RReeaaddlliinnee provides commands for searching through the command history (see + HHIISSTTOORRYY below) for lines containing a specified string. There are two search modes: _i_n_c_r_e_m_e_n_t_a_l and _n_o_n_-_i_n_c_r_e_m_e_n_t_a_l. - Incremental searches begin before the user has finished typing the search + Incremental searches begin before the user has finished typing the search string. As each character of the search string is typed, rreeaaddlliinnee displays - the next entry from the history matching the string typed so far. An in- + the next entry from the history matching the string typed so far. An in- cremental search requires only as many characters as needed to find the de- - sired history entry. When using emacs editing mode, type CC--rr to search - backward in the history for a particular string. Typing CC--ss searches for- - ward through the history. The characters present in the value of the - iisseeaarrcchh--tteerrmmiinnaattoorrss variable are used to terminate an incremental search. - If that variable has not been assigned a value, _E_S_C and CC--jj terminate an - incremental search. CC--gg aborts an incremental search and restores the + sired history entry. When using emacs editing mode, type CC--rr to search + backward in the history for a particular string. Typing CC--ss searches for- + ward through the history. The characters present in the value of the + iisseeaarrcchh--tteerrmmiinnaattoorrss variable are used to terminate an incremental search. + If that variable has not been assigned a value, _E_S_C and CC--jj terminate an + incremental search. CC--gg aborts an incremental search and restores the original line. When the search is terminated, the history entry containing the search string becomes the current line. - To find other matching entries in the history list, type CC--rr or CC--ss as ap- - propriate. This searches backward or forward in the history for the next - entry matching the search string typed so far. Any other key sequence - bound to a rreeaaddlliinnee command terminates the search and executes that com- - mand. For instance, a newline terminates the search and accepts the line, - thereby executing the command from the history list. A movement command - will terminate the search, make the last line found the current line, and + To find other matching entries in the history list, type CC--rr or CC--ss as ap- + propriate. This searches backward or forward in the history for the next + entry matching the search string typed so far. Any other key sequence + bound to a rreeaaddlliinnee command terminates the search and executes that com- + mand. For instance, a newline terminates the search and accepts the line, + thereby executing the command from the history list. A movement command + will terminate the search, make the last line found the current line, and begin editing. - RReeaaddlliinnee remembers the last incremental search string. If two CC--rrs are - typed without any intervening characters defining a new search string, + RReeaaddlliinnee remembers the last incremental search string. If two CC--rrs are + typed without any intervening characters defining a new search string, rreeaaddlliinnee uses any remembered search string. - Non-incremental searches read the entire search string before starting to + Non-incremental searches read the entire search string before starting to search for matching history entries. The search string may be typed by the user or be part of the contents of the current line. RReeaaddlliinnee CCoommmmaanndd NNaammeess - The following is a list of the names of the commands and the default key - sequences to which they are bound. Command names without an accompanying + The following is a list of the names of the commands and the default key + sequences to which they are bound. Command names without an accompanying key sequence are unbound by default. In the following descriptions, _p_o_i_n_t refers to the current cursor position, - and _m_a_r_k refers to a cursor position saved by the sseett--mmaarrkk command. The + and _m_a_r_k refers to a cursor position saved by the sseett--mmaarrkk command. The text between the point and mark is referred to as the _r_e_g_i_o_n. RReeaaddlliinnee has the concept of an _a_c_t_i_v_e _r_e_g_i_o_n: when the region is active, rreeaaddlliinnee redis- play highlights the region using the value of the aaccttiivvee--rreeggiioonn--ssttaarrtt--ccoolloorr - variable. The eennaabbllee--aaccttiivvee--rreeggiioonn rreeaaddlliinnee variable turns this on and + variable. The eennaabbllee--aaccttiivvee--rreeggiioonn rreeaaddlliinnee variable turns this on and off. Several commands set the region to active; those are noted below. CCoommmmaannddss ffoorr MMoovviinngg bbeeggiinnnniinngg--ooff--lliinnee ((CC--aa)) - Move to the start of the current line. This may also be bound to + Move to the start of the current line. This may also be bound to the Home key on some keyboards. eenndd--ooff--lliinnee ((CC--ee)) - Move to the end of the line. This may also be bound to the End key + Move to the end of the line. This may also be bound to the End key on some keyboards. ffoorrwwaarrdd--cchhaarr ((CC--ff)) Move forward a character. This may also be bound to the right arrow @@ -4072,32 +4078,32 @@ RREEAADDLLIINNEE Move forward to the end of the next word. Words are composed of al- phanumeric characters (letters and digits). bbaacckkwwaarrdd--wwoorrdd ((MM--bb)) - Move back to the start of the current or previous word. Words are + Move back to the start of the current or previous word. Words are composed of alphanumeric characters (letters and digits). sshheellll--ffoorrwwaarrdd--wwoorrdd ((MM--CC--ff)) - Move forward to the end of the next word. Words are delimited by + Move forward to the end of the next word. Words are delimited by non-quoted shell metacharacters. sshheellll--bbaacckkwwaarrdd--wwoorrdd ((MM--CC--bb)) - Move back to the start of the current or previous word. Words are + Move back to the start of the current or previous word. Words are delimited by non-quoted shell metacharacters. pprreevviioouuss--ssccrreeeenn--lliinnee Attempt to move point to the same physical screen column on the pre- - vious physical screen line. This will not have the desired effect + vious physical screen line. This will not have the desired effect if the current rreeaaddlliinnee line does not take up more than one physical - line or if point is not greater than the length of the prompt plus + line or if point is not greater than the length of the prompt plus the screen width. nneexxtt--ssccrreeeenn--lliinnee Attempt to move point to the same physical screen column on the next - physical screen line. This will not have the desired effect if the - current rreeaaddlliinnee line does not take up more than one physical line - or if the length of the current rreeaaddlliinnee line is not greater than + physical screen line. This will not have the desired effect if the + current rreeaaddlliinnee line does not take up more than one physical line + or if the length of the current rreeaaddlliinnee line is not greater than the length of the prompt plus the screen width. cclleeaarr--ddiissppllaayy ((MM--CC--ll)) Clear the screen and, if possible, the terminal's scrollback buffer, then redraw the current line, leaving the current line at the top of the screen. cclleeaarr--ssccrreeeenn ((CC--ll)) - Clear the screen, then redraw the current line, leaving the current + Clear the screen, then redraw the current line, leaving the current line at the top of the screen. With a numeric argument, refresh the current line without clearing the screen. rreeddrraaww--ccuurrrreenntt--lliinnee @@ -4105,16 +4111,16 @@ RREEAADDLLIINNEE CCoommmmaannddss ffoorr MMaanniippuullaattiinngg tthhee HHiissttoorryy aacccceepptt--lliinnee ((NNeewwlliinnee,, RReettuurrnn)) - Accept the line regardless of where the cursor is. If this line is - non-empty, add it to the history list according to the state of the - HHIISSTTCCOONNTTRROOLL and HHIISSTTIIGGNNOORREE variables. If the line is a modified + Accept the line regardless of where the cursor is. If this line is + non-empty, add it to the history list according to the state of the + HHIISSTTCCOONNTTRROOLL and HHIISSTTIIGGNNOORREE variables. If the line is a modified history line, restore the history line to its original state. pprreevviioouuss--hhiissttoorryy ((CC--pp)) Fetch the previous command from the history list, moving back in the list. This may also be bound to the up arrow key on some keyboards. nneexxtt--hhiissttoorryy ((CC--nn)) - Fetch the next command from the history list, moving forward in the - list. This may also be bound to the down arrow key on some key- + Fetch the next command from the history list, moving forward in the + list. This may also be bound to the down arrow key on some key- boards. bbeeggiinnnniinngg--ooff--hhiissttoorryy ((MM--<<)) Move to the first line in the history. @@ -4122,31 +4128,43 @@ RREEAADDLLIINNEE Move to the end of the input history, i.e., the line currently being entered. ooppeerraattee--aanndd--ggeett--nneexxtt ((CC--oo)) - Accept the current line for execution as if a newline had been en- + Accept the current line for execution as if a newline had been en- tered, and fetch the next line relative to the current line from the history for editing. A numeric argument, if supplied, specifies the history entry to use instead of the current line. ffeettcchh--hhiissttoorryy - With a numeric argument, fetch that entry from the history list and - make it the current line. Without an argument, move back to the + With a numeric argument, fetch that entry from the history list and + make it the current line. Without an argument, move back to the first entry in the history list. rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((CC--rr)) Search backward starting at the current line and moving "up" through the history as necessary. This is an incremental search. This com- mand sets the region to the matched text and activates the region. ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((CC--ss)) - Search forward starting at the current line and moving "down" - through the history as necessary. This is an incremental search. - This command sets the region to the matched text and activates the + Search forward starting at the current line and moving "down" + through the history as necessary. This is an incremental search. + This command sets the region to the matched text and activates the region. nnoonn--iinnccrreemmeennttaall--rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((MM--pp)) Search backward through the history starting at the current line us- ing a non-incremental search for a string supplied by the user. The search string may match anywhere in a history line. nnoonn--iinnccrreemmeennttaall--ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((MM--nn)) - Search forward through the history using a non-incremental search - for a string supplied by the user. The search string may match any- - where in a history line. + Search forward through the history starting at the current line us- + ing a non-incremental search for a string supplied by the user. The + search string may match anywhere in a history line. + nnoonn--iinnccrreemmeennttaall--rreevveerrssee--sseeaarrcchh--hhiissttoorryy--aaggaaiinn (()) + Search backward through the history starting at the current line us- + ing 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. + nnoonn--iinnccrreemmeennttaall--ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy--aaggaaiinn (()) + Search forward through the history starting at the current line us- + ing 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. hhiissttoorryy--sseeaarrcchh--bbaacckkwwaarrdd Search backward through the history for the string of characters be- tween the start of the current line and the point. The search @@ -6681,6 +6699,14 @@ SSHHEELLLL BBUUIILLTTIINN CCOOMMMMAANNDDSS word and all remaining characters on that line to be ig- nored, as in a non-interactive shell (see CCOOMMMMEENNTTSS above). This option is enabled by default. + kkvvppaaiirr__sspplliitt + If set, a compound assignment to an associative array per- + forms 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 appropri- + ate word expansions, and word splitting is not performed. + This option is enabled by default. llaassttppiippee If set, and job control is not active, the shell runs the last command of a pipeline not executed in the background in @@ -7373,4 +7399,4 @@ BBUUGGSS Array variables may not (yet) be exported. -GNU Bash 5.3 2026 July 1 _B_A_S_H(1) +GNU Bash 5.3 2026 August 14 _B_A_S_H(1) diff --git a/doc/bash.1 b/doc/bash.1 index 02ee691f..3c16c09a 100644 --- a/doc/bash.1 +++ b/doc/bash.1 @@ -5,7 +5,7 @@ .\" Case Western Reserve University .\" chet.ramey@case.edu .\" -.\" Last Change: Thu Jul 9 09:19:19 EDT 2026 +.\" Last Change: Fri Aug 14 15:49:37 EDT 2026 .\" .\" For bash_builtins, strip all but "SHELL BUILTIN COMMANDS" section .\" For rbash, strip all but "RESTRICTED SHELL" section @@ -22,7 +22,7 @@ .ds zX \" empty .if \n(zZ=1 .ig zZ .if \n(zY=1 .ig zY -.TH BASH 1 "2026 July 1" "GNU Bash 5.3" +.TH BASH 1 "2026 August 14" "GNU Bash 5.3" .\" .ie \n(.g \{\ .ds ' \(aq @@ -3273,8 +3273,8 @@ is also accepted; the \fIsubscript\fP is ignored. Associative arrays are created using .RS .BI "declare \-A\ " name -.RE \&. +.RE .PP Attributes may be specified for an array variable using the .B \%declare @@ -3307,14 +3307,27 @@ 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: \fIname\fP=\fB( \fP\fIkey1 value1 key2 value2\fP .\|.\|.\&\fB)\fP. -These are treated identically to -\fIname\fP=\fB(\fP [\fIkey1\fP]=\fIvalue1\fP [\fIkey2\fP]=\fIvalue2\fP -\&.\|.\|.\&\fB)\fP. 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. .PP +The +.B kvpair_split +option to the \fBshopt\fP builtin (see +.SM +.B "SHELL BUILTIN COMMANDS" +below) +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 +\fIname\fP=\fB(\fP [\fIkey1\fP]=\fIvalue1\fP [\fIkey2\fP]=\fIvalue2\fP +\&.\|.\|.\&\fB)\fP +and expanded appropriately. +.PP This syntax is also accepted by the .B declare builtin. @@ -7090,7 +7103,7 @@ common prefix of the set of possible completions using a different color. The color definitions are taken from the value of the \fBLS_COLORS\fP environment variable. If there is a color definition in \fB$LS_COLORS\fP for the custom suffix -.Q .readline-colored-completion-prefix , +.Q readline-colored-completion-prefix , \fBreadline\fP uses this color for the common prefix instead of its default. .TP @@ -7745,14 +7758,30 @@ This command sets the region to the matched text and activates the region. .TP .B non\-incremental\-reverse\-search\-history (M\-p) Search backward through the history starting at the current line -using a non-incremental search for a string supplied by the user. +using a non-incremental search +for a string supplied by the user. The search string may match anywhere in a history line. .TP .B non\-incremental\-forward\-search\-history (M\-n) -Search forward through the history using a non-incremental search +Search forward through the history starting at the current line +using a non-incremental search for a string supplied by the user. The search string may match anywhere in a history line. .TP +.B non\-incremental\-reverse\-search\-history\-again () +Search backward through the history starting at the current line +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. +.TP +.B non\-incremental\-forward\-search\-history\-again () +Search forward through the history starting at the current line +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. +.TP .B history\-search\-backward Search backward through the history for the string of characters between the start of the current line and the point. @@ -12419,6 +12448,15 @@ line to be ignored, as in a non-interactive shell .el above). This option is enabled by default. .TP 8 +.B 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. +.TP 8 .B 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 current shell environment. diff --git a/doc/bash.info b/doc/bash.info index c4e0ed8c..0a574ddc 100644 --- a/doc/bash.info +++ b/doc/bash.info @@ -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 . - 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 diff --git a/doc/bashref.info b/doc/bashref.info index 7df63d5a..55309191 100644 --- a/doc/bashref.info +++ b/doc/bashref.info @@ -2,9 +2,9 @@ This is bashref.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. @@ -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, 9 July 2026). The Bash home page is +Bash shell (version 5.3, 14 August 2026). The Bash home page is . - 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 @@ -5464,6 +5464,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 @@ -7341,13 +7350,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. @@ -9781,7 +9797,6 @@ File: bashref.info, Node: Commands For History, Next: Commands For Text, Prev ‘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. @@ -9792,6 +9807,20 @@ File: bashref.info, Node: Commands For History, Next: Commands For Text, Prev 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 @@ -13473,7 +13502,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. @@ -13490,13 +13519,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. @@ -13521,11 +13550,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) @@ -13589,9 +13622,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) @@ -13772,138 +13805,138 @@ D.5 Concept Index  Tag Table: -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 Commands27115 -Node: Pipelines27780 -Node: Lists31039 -Node: Compound Commands32991 -Node: Looping Constructs34003 -Node: Conditional Constructs36555 -Node: Command Grouping51870 -Node: Coprocesses53365 -Node: GNU Parallel56054 -Node: Shell Functions56975 -Node: Shell Parameters65426 -Node: Positional Parameters70330 -Node: Special Parameters71423 -Node: Shell Expansions74887 -Node: Brace Expansion77079 -Node: Tilde Expansion80418 -Node: Shell Parameter Expansion83376 -Node: Command Substitution104227 -Node: Arithmetic Expansion108081 -Node: Process Substitution109268 -Node: Word Splitting110438 -Node: Filename Expansion112885 -Node: Pattern Matching116112 -Node: Quote Removal121881 -Node: Redirections122188 -Node: Executing Commands132460 -Node: Simple Command Expansion133130 -Node: Command Search and Execution135241 -Node: Command Execution Environment137688 -Node: Environment141217 -Node: Exit Status143123 -Node: Signals145185 -Node: Shell Scripts150136 -Node: Shell Builtin Commands153443 -Node: Bourne Shell Builtins155787 -Node: Bash Builtins182509 -Node: Modifying Shell Behavior220247 -Node: The Set Builtin220592 -Node: The Shopt Builtin232627 -Node: Special Builtins249683 -Node: Shell Variables250675 -Node: Bourne Shell Variables251112 -Node: Bash Variables253623 -Node: Bash Features292910 -Node: Invoking Bash293927 -Node: Bash Startup Files301160 -Node: Interactive Shells306523 -Node: What is an Interactive Shell?306934 -Node: Is this Shell Interactive?307599 -Node: Interactive Shell Behavior308426 -Node: Bash Conditional Expressions312190 -Node: Shell Arithmetic317610 -Node: Aliases320940 -Node: Arrays324077 -Node: The Directory Stack331782 -Node: Directory Stack Builtins332582 -Node: Controlling the Prompt337030 -Node: The Restricted Shell340152 -Node: Bash POSIX Mode343248 -Node: Shell Compatibility Mode363210 -Node: Job Control372220 -Node: Job Control Basics372680 -Node: Job Control Builtins379051 -Node: Job Control Variables385842 -Node: Command Line Editing387076 -Node: Introduction and Notation388782 -Node: Readline Interaction391137 -Node: Readline Bare Essentials392328 -Node: Readline Movement Commands394139 -Node: Readline Killing Commands395138 -Node: Readline Arguments397164 -Node: Searching398257 -Node: Readline Init File400503 -Node: Readline Init File Syntax401809 -Node: Conditional Init Constructs428763 -Node: Sample Init File433151 -Node: Bindable Readline Commands436274 -Node: Commands For Moving437815 -Node: Commands For History440282 -Node: Commands For Text445678 -Node: Commands For Killing449806 -Node: Numeric Arguments452597 -Node: Commands For Completion453752 -Node: Keyboard Macros459451 -Node: Miscellaneous Commands460155 -Node: Readline vi Mode467701 -Node: Programmable Completion468681 -Node: Programmable Completion Builtins478420 -Node: A Programmable Completion Example490160 -Node: Using History Interactively495508 -Node: Bash History Facilities496192 -Node: Bash History Builtins499930 -Node: History Interaction507528 -Node: Event Designators512481 -Node: Word Designators514062 -Node: Modifiers516457 -Node: Installing Bash518397 -Node: Basic Installation519516 -Node: Compilers and Options523395 -Node: Compiling For Multiple Architectures524148 -Node: Installation Names525904 -Node: Specifying the System Type528141 -Node: Sharing Defaults528890 -Node: Operation Controls529607 -Node: Optional Features530629 -Node: Reporting Bugs543355 -Node: Major Differences From The Bourne Shell544715 -Node: GNU Free Documentation License566145 -Node: Indexes591325 -Node: Builtin Index591779 -Node: Reserved Word Index598880 -Node: Variable Index601328 -Node: Function Index618744 -Node: Concept Index632880 +Node: Top900 +Node: Introduction2840 +Node: What is Bash?3056 +Node: What is a shell?4192 +Node: Definitions6805 +Node: Basic Shell Features10135 +Node: Shell Syntax11362 +Node: Shell Operation12392 +Node: Quoting13686 +Node: Escape Character15027 +Node: Single Quotes15565 +Node: Double Quotes15917 +Node: ANSI-C Quoting17265 +Node: Locale Translation18662 +Node: Creating Internationalized Scripts20068 +Node: Comments24269 +Node: Shell Commands25039 +Node: Reserved Words25981 +Node: Simple Commands27127 +Node: Pipelines27792 +Node: Lists31051 +Node: Compound Commands33003 +Node: Looping Constructs34015 +Node: Conditional Constructs36567 +Node: Command Grouping51882 +Node: Coprocesses53377 +Node: GNU Parallel56066 +Node: Shell Functions56987 +Node: Shell Parameters65438 +Node: Positional Parameters70342 +Node: Special Parameters71435 +Node: Shell Expansions74899 +Node: Brace Expansion77091 +Node: Tilde Expansion80430 +Node: Shell Parameter Expansion83388 +Node: Command Substitution104239 +Node: Arithmetic Expansion108093 +Node: Process Substitution109280 +Node: Word Splitting110450 +Node: Filename Expansion112897 +Node: Pattern Matching116124 +Node: Quote Removal121893 +Node: Redirections122200 +Node: Executing Commands132472 +Node: Simple Command Expansion133142 +Node: Command Search and Execution135253 +Node: Command Execution Environment137700 +Node: Environment141229 +Node: Exit Status143135 +Node: Signals145197 +Node: Shell Scripts150148 +Node: Shell Builtin Commands153455 +Node: Bourne Shell Builtins155799 +Node: Bash Builtins182521 +Node: Modifying Shell Behavior220259 +Node: The Set Builtin220604 +Node: The Shopt Builtin232639 +Node: Special Builtins250178 +Node: Shell Variables251170 +Node: Bourne Shell Variables251607 +Node: Bash Variables254118 +Node: Bash Features293405 +Node: Invoking Bash294422 +Node: Bash Startup Files301655 +Node: Interactive Shells307018 +Node: What is an Interactive Shell?307429 +Node: Is this Shell Interactive?308094 +Node: Interactive Shell Behavior308921 +Node: Bash Conditional Expressions312685 +Node: Shell Arithmetic318105 +Node: Aliases321435 +Node: Arrays324572 +Node: The Directory Stack332678 +Node: Directory Stack Builtins333478 +Node: Controlling the Prompt337926 +Node: The Restricted Shell341048 +Node: Bash POSIX Mode344144 +Node: Shell Compatibility Mode364106 +Node: Job Control373116 +Node: Job Control Basics373576 +Node: Job Control Builtins379947 +Node: Job Control Variables386738 +Node: Command Line Editing387972 +Node: Introduction and Notation389678 +Node: Readline Interaction392033 +Node: Readline Bare Essentials393224 +Node: Readline Movement Commands395035 +Node: Readline Killing Commands396034 +Node: Readline Arguments398060 +Node: Searching399153 +Node: Readline Init File401399 +Node: Readline Init File Syntax402705 +Node: Conditional Init Constructs429659 +Node: Sample Init File434047 +Node: Bindable Readline Commands437170 +Node: Commands For Moving438711 +Node: Commands For History441178 +Node: Commands For Text447338 +Node: Commands For Killing451466 +Node: Numeric Arguments454257 +Node: Commands For Completion455412 +Node: Keyboard Macros461111 +Node: Miscellaneous Commands461815 +Node: Readline vi Mode469361 +Node: Programmable Completion470341 +Node: Programmable Completion Builtins480080 +Node: A Programmable Completion Example491820 +Node: Using History Interactively497168 +Node: Bash History Facilities497852 +Node: Bash History Builtins501590 +Node: History Interaction509188 +Node: Event Designators514141 +Node: Word Designators515722 +Node: Modifiers518117 +Node: Installing Bash520057 +Node: Basic Installation521176 +Node: Compilers and Options525055 +Node: Compiling For Multiple Architectures525808 +Node: Installation Names527564 +Node: Specifying the System Type529801 +Node: Sharing Defaults530550 +Node: Operation Controls531267 +Node: Optional Features532289 +Node: Reporting Bugs545015 +Node: Major Differences From The Bourne Shell546375 +Node: GNU Free Documentation License567805 +Node: Indexes592985 +Node: Builtin Index593439 +Node: Reserved Word Index600540 +Node: Variable Index602988 +Node: Function Index620404 +Node: Concept Index634832  End Tag Table diff --git a/doc/bashref.texi b/doc/bashref.texi index 568e88ee..4574d9b4 100644 --- a/doc/bashref.texi +++ b/doc/bashref.texi @@ -6591,6 +6591,15 @@ causes that word and all remaining characters on that line to be ignored, as in a non-interactive shell. This option is enabled by default. +@item 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. + @item 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 current shell environment. @@ -8833,13 +8842,23 @@ 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: @var{name}=(@var{key1} @var{value1} @var{key2} @var{value2} @dots{} ). -These are treated identically to -@var{name}=( [@var{key1}]=@var{value1} [@var{key2}]=@var{value2} @dots{} ). 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 +@code{kvpair_split} +option to the @code{shopt} builtin (see @ref{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 +@var{name}=( [@var{key1}]=@var{value1} [@var{key2}]=@var{value2} @dots{} ) +and expanded appropriately. + This syntax is also accepted by the @code{declare} builtin. Individual array elements may be assigned to using the diff --git a/doc/version.texi b/doc/version.texi index b221b64d..f1c77dcb 100644 --- a/doc/version.texi +++ b/doc/version.texi @@ -2,10 +2,10 @@ Copyright (C) 1988-2026 Free Software Foundation, Inc. @end ignore -@set LASTCHANGE Thu Jul 9 09:19:32 EDT 2026 +@set LASTCHANGE Fri Aug 14 15:49:54 EDT 2026 @set EDITION 5.3 @set VERSION 5.3 -@set UPDATED 9 July 2026 -@set UPDATED-MONTH July 2026 +@set UPDATED 14 August 2026 +@set UPDATED-MONTH August 2026 diff --git a/examples/loadables/Makefile.in b/examples/loadables/Makefile.in index d23dc69f..9ef06175 100644 --- a/examples/loadables/Makefile.in +++ b/examples/loadables/Makefile.in @@ -1,7 +1,7 @@ # # Simple makefile for the sample loadable builtins # -# Copyright (C) 1996-2025 Free Software Foundation, Inc. +# Copyright (C) 1996-2026 Free Software Foundation, Inc. # 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 @@ -103,7 +103,8 @@ INC = -I. -I.. -I$(topdir) -I$(topdir)/lib -I$(topdir)/builtins -I${srcdir} \ ALLPROG = print truefalse sleep finfo logname basename dirname fdflags \ tty pathchk tee head mkdir rmdir mkfifo mktemp printenv id whoami \ uname sync push ln unlink realpath strftime mypid setpgid seq rm \ - accept csv dsv cut stat getconf kv strptime chmod fltexpr jobid rev + accept csv dsv cut stat getconf kv strptime chmod fltexpr jobid rev \ + loadassoc OTHERPROG = necho hello cat pushd asort SUBDIRS = perl @@ -229,6 +230,9 @@ dsv: dsv.o kv: kv.o $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ kv.o $(SHOBJ_LIBS) +loadassoc: loadassoc.o + $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ loadassoc.o $(SHOBJ_LIBS) + cut: cut.o $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ cut.o $(SHOBJ_LIBS) @@ -327,7 +331,8 @@ OBJS = print.o truefalse.o accept.o sleep.o finfo.o getconf.o logname.o \ basename.o dirname.o tty.o pathchk.o tee.o head.o rmdir.o necho.o \ hello.o cat.o csv.o dsv.o kv.o cut.o printenv.o id.o whoami.o uname.o \ sync.o push.o mkdir.o mktemp.o realpath.o strftime.o setpgid.o stat.o \ - fdflags.o seq.o asort.o strptime.o chmod.o fltexpr.o jobid.o rev.o + fdflags.o seq.o asort.o strptime.o chmod.o fltexpr.o jobid.o rev.o \ + loadassoc.o ${OBJS}: ${BUILD_DIR}/config.h @@ -352,6 +357,7 @@ chmod.o: chmod.c csv.o: csv.c dsv.o: dsv.c kv.o: kv.c +loadassoc.o: loadassoc.c cut.o: cut.c printenv.o: printenv.c id.o: id.c diff --git a/examples/loadables/loadassoc.c b/examples/loadables/loadassoc.c new file mode 100644 index 00000000..f44b24d8 --- /dev/null +++ b/examples/loadables/loadassoc.c @@ -0,0 +1,170 @@ +/* loadassoc - treat the arguments as key-value pairs and assign them + sequentially to the associative array supplied as an + argument to the -a option. Very similar to the `kv' builtin. */ + +/* + This allows you to copy an existing associative array `assoc' like: + loadassoc -A copy "${assoc[@]@k}" +*/ + +/* + Copyright (C) 2026 Free Software Foundation, Inc. + + This file is part of GNU Bash. + 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 . +*/ + +#include + +#if defined (HAVE_UNISTD_H) +# include +#endif +#include "bashansi.h" +#include + +#include "loadables.h" + +#define LOADASSOC_ARRAY_DEFAULT "ASSOC" + +static int +kvlist (SHELL_VAR *var, WORD_LIST *list) +{ + WORD_LIST *k, *v; + char *key, *val; + int r; + + r = 0; + for (k = list; k; k = v->next) + { + v = k->next; + + key = savestring (k->word->word); + if (key == 0 || *key == '\0') + { + err_badarraysub (k->word->word); + free (key); + continue; + } + + val = v ? savestring (v->word->word) : 0; + if (val == 0) + { + val = (char *)xmalloc (1); + val[0] = '\0'; + } + + r += bind_assoc_variable (var, name_cell (var), key, val, 0) != 0; + + free (val); + + if (v == 0) + break; + } + + return r; +} + +int +loadassoc_builtin (WORD_LIST *list) +{ +#if defined (ARRAY_VARS) + int opt, rval, unset; + char *array_name; + SHELL_VAR *v; + + array_name = 0; + rval = EXECUTION_SUCCESS; + unset = 1; + + reset_internal_getopt (); + while ((opt = internal_getopt (list, "A:a")) != -1) + { + switch (opt) + { + case 'A': + array_name = list_optarg; + break; + case 'a': + unset = 0; + break; + CASE_HELPOPT; + default: + builtin_usage (); + return (EX_USAGE); + } + } + list = loptend; + + if (array_name == 0) + array_name = LOADASSOC_ARRAY_DEFAULT; + + if (valid_identifier (array_name) == 0) + { + sh_invalidid (array_name); + return (EXECUTION_FAILURE); + } + + v = find_or_make_array_variable (array_name, 3); + if (v == 0 || readonly_p (v) || noassign_p (v)) + { + if (v && readonly_p (v)) + err_readonly (array_name); + return (EXECUTION_FAILURE); + } + else if (assoc_p (v) == 0) + { + builtin_error ("%s: not an associative array", array_name); + return (EXECUTION_FAILURE); + } + if (invisible_p (v)) + VUNSETATTR (v, att_invisible); + + if (unset) + assoc_flush (assoc_cell (v)); + + rval = list ? kvlist (v, list) : 1; /* no args is ok */ + + return (rval > 0 ? EXECUTION_SUCCESS : EXECUTION_FAILURE); +#else + builtin_error ("arrays not available"); + return (EXECUTION_FAILURE); +#endif +} + +char *loadassoc_doc[] = { + "Assign arguments as keys and values of an associative array.", + "", + "Take arguments and assign them as keys and corresponding values to", + "an associative array. The array name is supplied as the argument to", + "the -A option. ASSOC is the default associative array name.", + "", + "If the -a option is supplied, the values are added to the existing", + "value of the array; if it is not supplied, the array is unset before", + "assigning any values.", + "", + "The return status is true if the assignment is performed successfully;", + "false if an error occurs or if the array variable is invalid or", + "readonly.", + + (char *)NULL +}; + +struct builtin loadassoc_struct = { + "loadassoc", /* builtin name */ + loadassoc_builtin, /* function implementing the builtin */ + BUILTIN_ENABLED, /* initial flags for builtin */ + loadassoc_doc, /* array of long documentation strings. */ + "loadassoc [-A aname] [-a] key value ...", /* usage synopsis; becomes short_doc */ + 0 /* reserved for internal use */ +}; diff --git a/general.h b/general.h index fe239c05..9787dbf6 100644 --- a/general.h +++ b/general.h @@ -1,6 +1,6 @@ /* general.h -- defines that everybody likes to use. */ -/* Copyright (C) 1993-2025 Free Software Foundation, Inc. +/* Copyright (C) 1993-2026 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. diff --git a/include/posixtime.h b/include/posixtime.h index 883fba7c..ced5efd0 100644 --- a/include/posixtime.h +++ b/include/posixtime.h @@ -79,7 +79,7 @@ getnow(void) # define timerisunset(tvp) ((tvp)->tv_sec == 0 && (tvp)->tv_usec == 0) #endif #if !defined (timerset) -# define timerset(tvp, s, u) do { tvp->tv_sec = s; tvp->tv_usec = u; } while (0) +# define timerset(tvp, s, u) do { (tvp)->tv_sec = s; (tvp)->tv_usec = u; } while (0) #endif #ifndef TIMEVAL_TO_TIMESPEC diff --git a/lib/readline/doc/readline.3 b/lib/readline/doc/readline.3 index b575a5ff..8e02cba8 100644 --- a/lib/readline/doc/readline.3 +++ b/lib/readline/doc/readline.3 @@ -6,9 +6,9 @@ .\" Case Western Reserve University .\" chet.ramey@case.edu .\" -.\" Last Change: Mon Oct 6 09:58:21 EDT 2025 +.\" Last Change: Mon Aug 10 10:05:09 EDT 2026 .\" -.TH READLINE 3 "2025 October 6" "GNU Readline 8.3" +.TH READLINE 3 "2026 August 10" "GNU Readline 8.3" .\" Ensure this string is initialized to avoid groff warnings. .ds zX \" empty .\" @@ -1166,14 +1166,30 @@ This command sets the region to the matched text and activates the region. .TP .B non\-incremental\-reverse\-search\-history (M\-p) Search backward through the history starting at the current line -using a non-incremental search for a string supplied by the user. +using a non-incremental search +for a string supplied by the user. The search string may match anywhere in a history line. .TP .B non\-incremental\-forward\-search\-history (M\-n) -Search forward through the history using a non-incremental search +Search forward through the history starting at the current line +using a non-incremental search for a string supplied by the user. The search string may match anywhere in a history line. .TP +.B non\-incremental\-reverse\-search\-history\-again () +Search backward through the history starting at the current line +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. +.TP +.B non\-incremental\-forward\-search\-history\-again () +Search forward through the history starting at the current line +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. +.TP .B history\-search\-backward Search backward through the history for the string of characters between the start of the current line and the point. diff --git a/lib/readline/doc/rluser.texi b/lib/readline/doc/rluser.texi index bf1dfff3..a376c267 100644 --- a/lib/readline/doc/rluser.texi +++ b/lib/readline/doc/rluser.texi @@ -1449,7 +1449,6 @@ This command sets the region to the matched text and activates the region. @item 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. @@ -1460,6 +1459,20 @@ 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. +@item 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. + +@item 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. + @item history-search-backward () Search backward through the history for the string of characters between the start of the current line and the point. diff --git a/lib/readline/doc/version.texi b/lib/readline/doc/version.texi index d2b4a7ab..71890f60 100644 --- a/lib/readline/doc/version.texi +++ b/lib/readline/doc/version.texi @@ -5,7 +5,7 @@ Copyright (C) 1988-2026 Free Software Foundation, Inc. @set EDITION 8.3 @set VERSION 8.3 -@set UPDATED 9 July 2026 -@set UPDATED-MONTH July 2026 +@set UPDATED 10 August +@set UPDATED-MONTH August 2026 -@set LASTCHANGE Thu Jul 9 09:20:35 EDT 2026 +@set LASTCHANGE Mon Aug 10 10:08:56 EDT 2026 diff --git a/patchlevel.h b/patchlevel.h index 29522d45..2a9d065c 100644 --- a/patchlevel.h +++ b/patchlevel.h @@ -25,6 +25,6 @@ regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh looks for to find the patch level (for the sccs version string). */ -#define PATCHLEVEL 9 +#define PATCHLEVEL 0 #endif /* _PATCHLEVEL_H_ */ diff --git a/po/ar.gmo b/po/ar.gmo index 47aa2c19..3da46149 100644 Binary files a/po/ar.gmo and b/po/ar.gmo differ diff --git a/po/ar.po b/po/ar.po index be325f71..f13956d8 100644 --- a/po/ar.po +++ b/po/ar.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: bash 5.3-rc2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-04-22 09:37-0400\n" -"PO-Revision-Date: 2026-02-01 10:59+0400\n" +"PO-Revision-Date: 2026-08-09 13:44+0400\n" "Last-Translator: Zayed Al-Saidi \n" "Language-Team: Arabic <(nothing)>\n" "Language: ar\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100 >= 3 && n%100<=10 ? 3 : n%100 >= 11 && n%100<=99 ? 4 : 5;\n" -"X-Generator: Lokalize 23.08.5\n" +"X-Generator: Lokalize 25.12.3\n" #: arrayfunc.c:63 msgid "bad array subscript" @@ -2293,7 +2293,7 @@ msgstr "builtin [أمر_قشرة_داخلي [وسيط ...]]" #: builtins.c:63 msgid "caller [expr]" -msgstr "المستدعَي [expr]" +msgstr "caller [تعبير]" #: builtins.c:66 msgid "cd [-L|[-P [-e]]] [-@] [dir]" diff --git a/po/id.gmo b/po/id.gmo index 8bd3bf66..b81d46c7 100644 Binary files a/po/id.gmo and b/po/id.gmo differ diff --git a/po/id.po b/po/id.po index 45416e76..a0b89439 100644 --- a/po/id.po +++ b/po/id.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: bash 5.3-rc2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-04-22 09:37-0400\n" -"PO-Revision-Date: 2026-07-31 20:06+0700\n" +"PO-Revision-Date: 2026-08-14 17:00+0700\n" "Last-Translator: Arif E. Nugroho \n" "Language-Team: Indonesian \n" "Language: id\n" @@ -44,10 +44,8 @@ msgid "%s: %s: must use subscript when assigning associative array" msgstr "%s: %s: harus menggunakan subscript ketika memberikan assosiasi array" #: bashhist.c:464 -#, fuzzy -#| msgid "%s: cannot create: %s" msgid "cannot create" -msgstr "%s: tidak dapat membuat: %s" +msgstr "tidak dapat membuat" #: bashline.c:4642 msgid "bash_execute_unix_command: cannot find keymap for command" @@ -64,10 +62,9 @@ msgid "no closing `%c' in %s" msgstr "tidak menutup '%c' dalam %s" #: bashline.c:4873 -#, fuzzy, c-format -#| msgid "%s: missing colon separator" +#, c-format msgid "%s: missing separator" -msgstr "%s: hilang pemisah colon" +msgstr "%s: hilang pemisah" #: bashline.c:4920 #, c-format @@ -80,10 +77,9 @@ msgid "brace expansion: cannot allocate memory for %s" msgstr "brace expansion: cannot allocate memory for %s" #: braces.c:403 -#, fuzzy, c-format -#| msgid "brace expansion: failed to allocate memory for %u elements" +#, c-format msgid "brace expansion: failed to allocate memory for %s elements" -msgstr "brace expansion: failed to allocate memory for %u elements" +msgstr "brace expansion: gagal untuk mengalokasikan memori untuk %s elemen" #: braces.c:462 #, c-format @@ -105,10 +101,8 @@ msgid "`%s': invalid keymap name" msgstr "'%s': nama keymap tidak valid" #: builtins/bind.def:277 -#, fuzzy -#| msgid "%s: cannot read: %s" msgid "cannot read" -msgstr "%s: tidak dapat membaca: %s" +msgstr "tidak dapat membaca" #: builtins/bind.def:353 builtins/bind.def:382 #, c-format @@ -139,20 +133,6 @@ msgid "only meaningful in a `for', `while', or `until' loop" msgstr "hanya berarti dalam sebuah `for', `while', atau `until'loop" #: builtins/caller.def:135 -#, fuzzy -#| msgid "" -#| "Return the context of the current subroutine call.\n" -#| " \n" -#| " Without EXPR, returns \"$line $filename\". With EXPR, returns\n" -#| " \"$line $subroutine $filename\"; this extra information can be used to\n" -#| " provide a stack trace.\n" -#| " \n" -#| " The value of EXPR indicates how many call frames to go back before the\n" -#| " current one; the top frame is frame 0.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns 0 unless the shell is not executing a shell function or EXPR\n" -#| " is invalid." msgid "" "Returns the context of the current subroutine call.\n" " \n" @@ -268,10 +248,9 @@ msgid "%s: readonly variable" msgstr "%s: variabel baca-saja" #: builtins/common.c:248 -#, fuzzy, c-format -#| msgid "%s: cannot unset" +#, c-format msgid "%s: cannot assign" -msgstr "%s: tidak dapat unset" +msgstr "%s: tidak dapat assign" #: builtins/common.c:255 #, c-format @@ -302,10 +281,9 @@ msgid "no job control" msgstr "tidak ada pengontrol kerja" #: builtins/common.c:279 -#, fuzzy, c-format -#| msgid "%s: invalid timeout specification" +#, c-format msgid "%s: invalid job specification" -msgstr "%s: spesifikasi timeout tidak valid" +msgstr "%s: spesifikasi pekerjaan tidak valid" #: builtins/common.c:289 #, c-format @@ -322,28 +300,20 @@ msgid "%s: not a shell builtin" msgstr "%s: bukan sebuah builtin shell" #: builtins/common.c:307 -#, fuzzy -#| msgid "write error: %s" msgid "write error" -msgstr "gagal menulis: %s" +msgstr "gagal menulis" #: builtins/common.c:314 -#, fuzzy -#| msgid "error setting terminal attributes: %s" msgid "error setting terminal attributes" -msgstr "error menentukan atribut terminal: %s" +msgstr "error menentukan atribut terminal" #: builtins/common.c:316 -#, fuzzy -#| msgid "error getting terminal attributes: %s" msgid "error getting terminal attributes" -msgstr "error mendapatkan atribut terminal: %s" +msgstr "error mendapatkan atribut terminal" #: builtins/common.c:611 -#, fuzzy -#| msgid "%s: error retrieving current directory: %s: %s\n" msgid "error retrieving current directory" -msgstr "%s: error mengambil direktori saat ini: %s: %s\n" +msgstr "error mengambil direktori saat ini" #: builtins/common.c:675 builtins/common.c:677 #, c-format @@ -351,10 +321,9 @@ msgid "%s: ambiguous job spec" msgstr "%s: spesifikasi pekerjaan ambigu" #: builtins/common.c:709 -#, fuzzy, c-format -#| msgid "%s: option requires an argument" +#, c-format msgid "%s: job specification requires leading `%%'" -msgstr "%s: pilihan membutuhkan sebuah argumen" +msgstr "%s: spesifikasi pekerjaan membutuhkan awalan '%%'" #: builtins/common.c:937 msgid "help not available in this version" @@ -502,22 +471,17 @@ msgstr "%s: file terlalu besar" #: builtins/evalfile.c:189 builtins/evalfile.c:207 execute_cmd.c:6222 #: shell.c:1687 -#, fuzzy -#| msgid "%s: cannot execute binary file" msgid "cannot execute binary file" -msgstr "%s: tidak dapat menjalankan berkas binary" +msgstr "tidak dapat menjalankan berkas binary" #: builtins/evalstring.c:478 -#, fuzzy, c-format -#| msgid "error importing function definition for `%s'" +#, c-format msgid "%s: ignoring function definition attempt" -msgstr "error mengimpor definisi fungsi untuk `%s'" +msgstr "%s: mengabaikan untuk mencoba definisi fungsi" #: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:249 -#, fuzzy -#| msgid "%s: cannot execute: %s" msgid "cannot execute" -msgstr "%s: tidak dapat menjalankan: %s" +msgstr "tidak dapat menjalankan" #: builtins/exit.def:61 #, c-format @@ -548,10 +512,8 @@ msgid "history specification" msgstr "spesifikasi sejarah" #: builtins/fc.def:462 -#, fuzzy -#| msgid "%s: cannot open temp file: %s" msgid "cannot open temp file" -msgstr "%s: tidak dapat membuka file sementara: %s" +msgstr "tidak dapat membuka file sementara" #: builtins/fg_bg.def:150 builtins/jobs.def:293 msgid "current" @@ -606,17 +568,13 @@ msgid "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." msgstr "tidak ada topik bantuan yang cocok dengan `%s'. Coba `help help' atau 'man -k %s' atau `info %s'." #: builtins/help.def:214 -#, fuzzy -#| msgid "cannot suspend" msgid "cannot open" -msgstr "tidak dapat suspend" +msgstr "tidak dapat membuka" #: builtins/help.def:264 builtins/help.def:306 builtins/history.def:306 #: builtins/history.def:325 builtins/read.def:909 -#, fuzzy -#| msgid "read error: %d: %s" msgid "read error" -msgstr "error baca: %d: %s" +msgstr "error baca" #: builtins/help.def:517 #, c-format @@ -647,10 +605,8 @@ msgid "history position" msgstr "posisi sejarah" #: builtins/history.def:280 -#, fuzzy -#| msgid "empty array variable name" msgid "empty filename" -msgstr "nama variabel array kosong" +msgstr "nama berkas kosong" #: builtins/history.def:282 subst.c:8226 #, c-format @@ -690,10 +646,8 @@ msgid "%s: invalid file descriptor specification" msgstr "%s: spesifikasi file deskripsi tidak valid" #: builtins/mapfile.def:257 builtins/read.def:380 -#, fuzzy -#| msgid "%d: invalid file descriptor: %s" msgid "invalid file descriptor" -msgstr "%d: file deskriptor %s tidak valid" +msgstr "berkas deskriptor tidak valid" #: builtins/mapfile.def:266 builtins/mapfile.def:304 #, c-format @@ -1001,20 +955,16 @@ msgid "`%c': bad command" msgstr "`%c': perintah buruk" #: builtins/ulimit.def:465 builtins/ulimit.def:748 -#, fuzzy -#| msgid "%s: cannot get limit: %s" msgid "cannot get limit" -msgstr "%s: tidak dapat get limit: %s" +msgstr "tidak dapat memperoleh batas" #: builtins/ulimit.def:498 msgid "limit" msgstr "batas" #: builtins/ulimit.def:511 builtins/ulimit.def:812 -#, fuzzy -#| msgid "%s: cannot modify limit: %s" msgid "cannot modify limit" -msgstr "%s: tidak dapat memodifikasi batas: %s" +msgstr "tidak dapat memodifikasi batas" #: builtins/umask.def:114 msgid "octal number" @@ -1051,10 +1001,9 @@ msgid "INFORM: " msgstr "BERI TAHU: " #: error.c:261 -#, fuzzy, c-format -#| msgid "warning: " +#, c-format msgid "DEBUG warning: " -msgstr "peringatan: " +msgstr "DEBUG peringatan: " #: error.c:413 msgid "unknown command error" @@ -1082,10 +1031,8 @@ msgid "\atimed out waiting for input: auto-logout\n" msgstr "kehabisan waktu menunggu masukan: otomatis-keluar\n" #: execute_cmd.c:606 -#, fuzzy -#| msgid "cannot redirect standard input from /dev/null: %s" msgid "cannot redirect standard input from /dev/null" -msgstr "tidak dapat menyalurkan masukan standar dari /dev/null: %s" +msgstr "tidak dapat menyalurkan masukan standar dari /dev/null" #: execute_cmd.c:1412 #, c-format @@ -1127,10 +1074,8 @@ msgid "%s: maximum function nesting level exceeded (%d)" msgstr "%s: maximum function nesting level exceeded (%d)" #: execute_cmd.c:5754 -#, fuzzy -#| msgid "%s: command not found" msgid "command not found" -msgstr "%s: perintah tidak ditemukan" +msgstr "perintah tidak ditemukan" #: execute_cmd.c:5783 #, c-format @@ -1138,16 +1083,13 @@ msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: dibatasi: tidak dapat menspesifikasikan '/' dalam nama nama perintah" #: execute_cmd.c:6176 -#, fuzzy -#| msgid "%s: %s: bad interpreter" msgid "bad interpreter" -msgstr "%s: %s: interpreter buruk" +msgstr "interpreter buruk" #: execute_cmd.c:6185 -#, fuzzy, c-format -#| msgid "%s: cannot execute binary file" +#, c-format msgid "%s: cannot execute: required file not found" -msgstr "%s: tidak dapat menjalankan berkas binary" +msgstr "%s: tidak dapat menjalankan: berkas yang diperlukan tidak ada" #: execute_cmd.c:6361 #, c-format @@ -1163,20 +1105,16 @@ msgid "recursion stack underflow" msgstr "rekursi stack underflow" #: expr.c:485 -#, fuzzy -#| msgid "syntax error in expression" msgid "arithmetic syntax error in expression" -msgstr "syntax error dalam expresi" +msgstr "kesalahan syntax arithmetic dalam expresi" #: expr.c:529 msgid "attempted assignment to non-variable" msgstr "mencoba menempatkan ke bukan sebuah variabel" #: expr.c:538 -#, fuzzy -#| msgid "syntax error in variable assignment" msgid "arithmetic syntax error in variable assignment" -msgstr "syntax error dalam menempatkan variabel" +msgstr "kesalahan syntax arithmetic dalam menempatkan variabel" #: expr.c:552 expr.c:917 msgid "division by 0" @@ -1203,10 +1141,8 @@ msgid "missing `)'" msgstr "hilang `)'" #: expr.c:1120 expr.c:1507 -#, fuzzy -#| msgid "syntax error: operand expected" msgid "arithmetic syntax error: operand expected" -msgstr "syntax error: operand diharapkan" +msgstr "kesalahan syntax arithmetic: operand diharapkan" #: expr.c:1468 expr.c:1489 msgid "--: assignment requires lvalue" @@ -1217,10 +1153,8 @@ msgid "++: assignment requires lvalue" msgstr "++: assignment memerlukan lvalue" #: expr.c:1509 -#, fuzzy -#| msgid "syntax error: invalid arithmetic operator" msgid "arithmetic syntax error: invalid arithmetic operator" -msgstr "syntax error: operator arithmetic tidak valid" +msgstr "kesalahan syntax arithmetic: operator arithmetic tidak valid" #: expr.c:1532 #, c-format @@ -1524,10 +1458,8 @@ msgid "network operations not supported" msgstr "operasi jaringan tidak dilayani" #: locale.c:226 locale.c:228 locale.c:301 locale.c:303 -#, fuzzy -#| msgid "setlocale: %s: cannot change locale (%s)" msgid "cannot change locale" -msgstr "setlocale: %s: tidak dapat mengubah lokal (%s)" +msgstr "tidak dapat mengubah lokal" #: mailcheck.c:435 msgid "You have mail in $_" @@ -1653,10 +1585,9 @@ msgid "unexpected token %d in conditional command" msgstr "tanda %d tidak terduga dalam perintah kondisional" #: parse.y:6827 -#, fuzzy, c-format -#| msgid "unexpected EOF while looking for matching `%c'" +#, c-format msgid "syntax error near unexpected token `%s' while looking for matching `%c'" -msgstr "EOF tidak terduga ketika mencari untuk pencocokan `%c'" +msgstr "kesalahan syntax dekat token `%s' tidak terduga ketika mencari untuk pencocokan `%c'" #: parse.y:6829 #, c-format @@ -1669,16 +1600,14 @@ msgid "syntax error near `%s'" msgstr "syntax error didekat `%s'" #: parse.y:6867 -#, fuzzy, c-format -#| msgid "syntax error: unexpected end of file" +#, c-format msgid "syntax error: unexpected end of file from `%s' command on line %d" -msgstr "syntax error: tidak terduga diakhir dari berkas" +msgstr "syntax error: tidak terduga diakhir dari berkas dari `%s' perintah di baris %d" #: parse.y:6869 -#, fuzzy, c-format -#| msgid "syntax error: unexpected end of file" +#, c-format msgid "syntax error: unexpected end of file from command on line %d" -msgstr "syntax error: tidak terduga diakhir dari berkas" +msgstr "syntax error: tidak terduga diakhir dari berkas dari perintah di baris %d" #: parse.y:6873 msgid "syntax error: unexpected end of file" @@ -1698,10 +1627,8 @@ msgid "unexpected EOF while looking for matching `)'" msgstr "EOF tidak terduga ketika mencari untuk pencocokan ')'" #: pathexp.c:897 -#, fuzzy -#| msgid "invalid base" msgid "invalid glob sort type" -msgstr "basis tidak valid" +msgstr "tipe urutan glob tidak valid" #: pcomplete.c:1070 #, c-format @@ -1747,34 +1674,24 @@ msgid "file descriptor out of range" msgstr "berkas deskripsi diluar dari jangkauan" #: redir.c:201 -#, fuzzy -#| msgid "%s: ambiguous redirect" msgid "ambiguous redirect" -msgstr "%s: redirect ambigu" +msgstr "redirect ambigu" #: redir.c:205 -#, fuzzy -#| msgid "%s: cannot overwrite existing file" msgid "cannot overwrite existing file" -msgstr "%s: tidak dapat menulis berkas yang sudah ada" +msgstr "tidak dapat menulis berkas yang sudah ada" #: redir.c:210 -#, fuzzy -#| msgid "%s: restricted: cannot redirect output" msgid "restricted: cannot redirect output" -msgstr "%s: restricted: tidak dapat meredirect keluaran" +msgstr "restricted: tidak dapat meredirect keluaran" #: redir.c:215 -#, fuzzy -#| msgid "cannot create temp file for here-document: %s" msgid "cannot create temp file for here-document" -msgstr "tidak dapat membuat berkas sementara untuk dokumen disini: %s" +msgstr "tidak dapat membuat berkas sementara untuk dokumen disini" #: redir.c:219 -#, fuzzy -#| msgid "%s: cannot assign fd to variable" msgid "cannot assign fd to variable" -msgstr "%s: tidak dapat meng-'assign' fd ke variabel" +msgstr "tidak dapat meng-'assign' fd ke variabel" #: redir.c:639 msgid "/dev/(tcp|udp)/host/port not supported without networking" @@ -2096,10 +2013,8 @@ msgid "function_substitute: cannot open anonymous file for output" msgstr "function_substitute: tidak dapat membuka berkas anonim untuk keluaran" #: subst.c:7036 -#, fuzzy -#| msgid "command_substitute: cannot duplicate pipe as fd 1" msgid "function_substitute: cannot duplicate anonymous file as standard output" -msgstr "command_substitute: tidak dapat menduplikasikan pipe sebagi fd 1" +msgstr "function_substitute: tidak dapat menduplikasikan berkas anonim sebagai standar keluaran" #: subst.c:7210 subst.c:7231 msgid "cannot make pipe for command substitution" @@ -2167,10 +2082,9 @@ msgid "argument expected" msgstr "argumen diharapkan" #: test.c:164 -#, fuzzy, c-format -#| msgid "%s: integer expression expected" +#, c-format msgid "%s: integer expected" -msgstr "%s: expresi integer diduga" +msgstr "%s: integer diduga" #: test.c:292 msgid "`)' expected" @@ -2221,10 +2135,8 @@ msgid "trap_handler: bad signal %d" msgstr "trap_handler: sinyal buruk %d" #: unwind_prot.c:246 unwind_prot.c:292 -#, fuzzy -#| msgid "%s: file not found" msgid "frame not found" -msgstr "%s: berkas tidak ditemukan" +msgstr "frame tidak ditemukan" #: variables.c:441 #, c-format @@ -2240,10 +2152,9 @@ msgstr "level shell (%d) terlalu tinggi, mereset ke 1" #: variables.c:2315 variables.c:2350 variables.c:2378 variables.c:2405 #: variables.c:2431 variables.c:3274 variables.c:3282 variables.c:3797 #: variables.c:3841 -#, fuzzy, c-format -#| msgid "maximum here-document count exceeded" +#, c-format msgid "%s: maximum nameref depth (%d) exceeded" -msgstr "jumlah maksimal dokumen disini tercapai" +msgstr "%s: maksimal nameref depth (%d) tercapai" #: variables.c:2641 msgid "make_local_variable: no function context at current scope" @@ -2311,10 +2222,8 @@ msgid "%s: %s: compatibility value out of range" msgstr "%s: %s: diluar jangkauan" #: version.c:50 -#, fuzzy -#| msgid "Copyright (C) 2020 Free Software Foundation, Inc." msgid "Copyright (C) 2025 Free Software Foundation, Inc." -msgstr "Hak Cipta (C) 2020 Free Software Foundation, Inc." +msgstr "Hak Cipta (C) 2025 Free Software Foundation, Inc." #: version.c:51 msgid "License GPLv3+: GNU GPL version 3 or later \n" @@ -2363,7 +2272,7 @@ msgstr "unalias [-a] name [nama ...]" #: builtins.c:53 msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]" -msgstr "bind [-lpvsPVSX] [-m keymap] [-f nama_berkas] [-q nama] [-u nama] [-r keyseq] [-x keyseq:perintah-shell] [keyseq:readline-function atau readline-command]" +msgstr "bind [-lpvsPVSX] [-m keymap] [-f nama berkas] [-q nama] [-u nama] [-r keyseq] [-x keyseq:perintah-shell] [keyseq:readline-function atau readline-command]" #: builtins.c:56 msgid "break [n]" @@ -2379,13 +2288,11 @@ msgstr "builtin [shell-builtin [arg ...]]" #: builtins.c:63 msgid "caller [expr]" -msgstr "caller [expr]" +msgstr "pemanggil [expr]" #: builtins.c:66 -#, fuzzy -#| msgid "cd [-L|[-P [-e]] [-@]] [dir]" msgid "cd [-L|[-P [-e]]] [-@] [dir]" -msgstr "cd [-L|[-P [-e]] [-@]] [direktori]" +msgstr "cd [-L|[-P [-e]]] [-@] [direktori]" #: builtins.c:68 msgid "pwd [-LP]" @@ -2393,19 +2300,15 @@ msgstr "pwd [-LP]" #: builtins.c:76 msgid "command [-pVv] command [arg ...]" -msgstr "command [-pVv] perintah [argumen ...]" +msgstr "perintah [-pVv] perintah [argumen ...]" #: builtins.c:78 -#, fuzzy -#| msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]" msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]" -msgstr "declare [-aAfFgiIlnrtux] [-p] [name[=nilai] ...]" +msgstr "declare [-aAfFgiIlnrtux] [name[=nilai] ...] or declare -p [-aAfFilnrtux] [name ...]" #: builtins.c:80 -#, fuzzy -#| msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..." msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]" -msgstr "typeset [-aAfFgiIlnrtux] [-p] name[=nilai] ..." +msgstr "typeset [-aAfFgiIlnrtux] name[=nilai] ... or typeset -p [-aAfFilnrtux] [name ...]" #: builtins.c:82 msgid "local [option] name[=value] ..." @@ -2421,7 +2324,7 @@ msgstr "echo [-n] [arg ...]" #: builtins.c:92 msgid "enable [-a] [-dnps] [-f filename] [name ...]" -msgstr "enable [-a] [-dnps] [-f nama_berkas] [name ...]" +msgstr "enable [-a] [-dnps] [-f nama berkas] [name ...]" #: builtins.c:94 msgid "eval [arg ...]" @@ -2461,11 +2364,11 @@ msgstr "hash [-lr] [-p nama jalur] [-dt] [nama ...]" #: builtins.c:119 msgid "help [-dms] [pattern ...]" -msgstr "help [-dms] [pola ...]" +msgstr "bantuan [-dms] [pola ...]" #: builtins.c:123 msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]" -msgstr "history [-c] [-d ofset] [n] atau history -anrw [nama_berkas] atau history -ps arg [arg...]" +msgstr "sejarah [-c] [-d ofset] [n] atau history -anrw [nama berkas] atau history -ps arg [arg...]" #: builtins.c:127 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]" @@ -2481,33 +2384,27 @@ msgstr "kill [-s spesifikasi sinyal | -n nomor sinyal | -sigspec] pid | jobsepc #: builtins.c:136 msgid "let arg [arg ...]" -msgstr "let arg [argumen ...]" +msgstr "biarkan arg [argumen ...]" #: builtins.c:138 -#, fuzzy -#| msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" msgid "read [-Eers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" -msgstr "read [-ers] [-a array] [-d pembatas] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" +msgstr "read [-Eers] [-a array] [-d pembatas] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]" #: builtins.c:140 msgid "return [n]" msgstr "return [n]" #: builtins.c:142 -#, fuzzy -#| msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]" msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]" -msgstr "set [-abefhkmnptuvxBCHP] [-o nama-pilihan] [--] [argumen ...]" +msgstr "set [-abefhkmnptuvxBCEHPT] [-o nama-pilihan] [--] [-] [argumen ...]" #: builtins.c:144 msgid "unset [-f] [-v] [-n] [name ...]" msgstr "unset [-f] [-v] [-n] [name ...]" #: builtins.c:146 -#, fuzzy -#| msgid "export [-fn] [name[=value] ...] or export -p" msgid "export [-fn] [name[=value] ...] or export -p [-f]" -msgstr "export [-fn] [name[=nilai] ...] atau export -p" +msgstr "export [-fn] [name[=nilai] ...] atau export -p [-f]" #: builtins.c:148 msgid "readonly [-aAf] [name[=value] ...] or readonly -p" @@ -2518,16 +2415,12 @@ msgid "shift [n]" msgstr "shift [n]" #: builtins.c:152 -#, fuzzy -#| msgid "source filename [arguments]" msgid "source [-p path] filename [arguments]" -msgstr "source nama_berkas [argumen]" +msgstr "source [-p jalur] nama berkas [argumen]" #: builtins.c:154 -#, fuzzy -#| msgid ". filename [arguments]" msgid ". [-p path] filename [arguments]" -msgstr ". nama_berkas [argumen]" +msgstr ". [-p jalur] nama berkas [argumen]" #: builtins.c:157 msgid "suspend [-f]" @@ -2542,20 +2435,16 @@ msgid "[ arg... ]" msgstr "[ arg... ]" #: builtins.c:166 -#, fuzzy -#| msgid "trap [-lp] [[arg] signal_spec ...]" msgid "trap [-Plp] [[action] signal_spec ...]" -msgstr "trap [-lp] [[arg] spesifikasi sinyal ...]" +msgstr "trap [-Plp] [[aksi] spesifikasi sinyal ...]" #: builtins.c:168 msgid "type [-afptP] name [name ...]" msgstr "type [-afptP] nama [name ...]" #: builtins.c:171 -#, fuzzy -#| msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]" msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]" -msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [batas]" +msgstr "ulimit [-SHabcdefiklmnpqrstuvxPRT] [batas]" #: builtins.c:174 msgid "umask [-p] [-S] [mode]" @@ -2598,16 +2487,12 @@ msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else C msgstr "if PERINTAH; then PERINTAH; [ elif PERINTAH; then PERINTAH; ]... [ else PERINTAH; ] fi" #: builtins.c:198 -#, fuzzy -#| msgid "while COMMANDS; do COMMANDS; done" msgid "while COMMANDS; do COMMANDS-2; done" -msgstr "while PERINTAH; do PERINTAH; done" +msgstr "while PERINTAH; do PERINTAH-2; done" #: builtins.c:200 -#, fuzzy -#| msgid "until COMMANDS; do COMMANDS; done" msgid "until COMMANDS; do COMMANDS-2; done" -msgstr "until PERINTAH; do PERINTAH; done" +msgstr "until PERINTAH; do PERINTAH-2; done" #: builtins.c:202 msgid "coproc [NAME] command [redirections]" @@ -2662,10 +2547,8 @@ msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o pilihan] [-A action] [-G globpat] [-W daftar kata] [-F fungsi] [-C perintah] [-X filterpat] [-P prefix] [-S suffix] [name ...]" #: builtins.c:237 -#, fuzzy -#| msgid "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" msgid "compgen [-V varname] [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]" -msgstr "compgen [-abcdefgjksuv] [-o pilihan] [-A aksi] [-G globpat] [-W wordlist] [-F fungsi] [-C perintah] [-X filterpat] [-P prefix] [-S suffix] [word]" +msgstr "compgen [-V namavar] [-abcdefgjksuv] [-o pilihan] [-A aksi] [-G globpat] [-W wordlist] [-F fungsi] [-C perintah] [-X filterpat] [-P prefix] [-S suffix] [word]" #: builtins.c:241 msgid "compopt [-o|+o option] [-DEI] [name ...]" @@ -2680,23 +2563,6 @@ msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C c msgstr "readarray [-d pembatas] [-n jumlah] [-O asal] [-s jumlah] [-t] [-u fd] [-C callback] [-c quantum] [array]" #: builtins.c:258 -#, fuzzy -#| msgid "" -#| "Define or display aliases.\n" -#| " \n" -#| " Without arguments, `alias' prints the list of aliases in the reusable\n" -#| " form `alias NAME=VALUE' on standard output.\n" -#| " \n" -#| " Otherwise, an alias is defined for each NAME whose VALUE is given.\n" -#| " A trailing space in VALUE causes the next word to be checked for\n" -#| " alias substitution when the alias is expanded.\n" -#| " \n" -#| " Options:\n" -#| " -p\tPrint all defined aliases in a reusable format\n" -#| " \n" -#| " Exit Status:\n" -#| " alias returns true unless a NAME is supplied for which no alias has been\n" -#| " defined." msgid "" "Define or display aliases.\n" " \n" @@ -3099,22 +2965,6 @@ msgstr "" " Selalu gagal." #: builtins.c:476 -#, fuzzy -#| msgid "" -#| "Execute a simple command or display information about commands.\n" -#| " \n" -#| " Runs COMMAND with ARGS suppressing shell function lookup, or display\n" -#| " information about the specified COMMANDs. Can be used to invoke commands\n" -#| " on disk when a function with the same name exists.\n" -#| " \n" -#| " Options:\n" -#| " -p use a default value for PATH that is guaranteed to find all of\n" -#| " the standard utilities\n" -#| " -v print a description of COMMAND similar to the `type' builtin\n" -#| " -V print a more verbose description of each COMMAND\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns exit status of COMMAND, or failure if COMMAND is not found." msgid "" "Execute a simple command or display information about commands.\n" " \n" @@ -3141,7 +2991,8 @@ msgstr "" " Pilihan:\n" " -p gunakan sebuah nilai default untuk PATH yang menjamin untuk mencari seluruh\n" " penggunaan stadar\n" -" -v menampilkan deskripsi dari PERINTAH sama dengan `type' builtin\n" +" -v menampilkan sebuah kata yang mengindikasikan perintah atau nama berkas yang\n" +" melibatkan COMMAND\n" " -V menampilkan lebih jelas deskripsi dari setiap PERINTAH\n" " \n" " Status Keluar:\n" @@ -3267,19 +3118,6 @@ msgstr "" " Sama dengan `declare'. Lihat `help declare'." #: builtins.c:547 -#, fuzzy -#| msgid "" -#| "Define local variables.\n" -#| " \n" -#| " Create a local variable called NAME, and give it VALUE. OPTION can\n" -#| " be any option accepted by `declare'.\n" -#| " \n" -#| " Local variables can only be used within a function; they are visible\n" -#| " only to the function where they are defined and its children.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid option is supplied, a variable\n" -#| " assignment error occurs, or the shell is not executing a function." msgid "" "Define local variables.\n" " \n" @@ -3301,6 +3139,9 @@ msgstr "" " Membuat sebuah variabel locak dipanggil NAMA, dan memberikan kepadanya NILAI. OPSI dapat\n" " berupa semua pilihan yang diterima oleh `declare'.\n" " \n" +" Jika NAME apapun adalah \"-\", simpanan lokal men-set opsi shell dan mengembalikan\n" +" mereka ketika fungsi kembali.\n" +" \n" " Variabel lokal hanya dapat digunakan dalam sebuah fungsi; mereka hanya\n" " dapat dilihat ke fungsi dimana mereka terdefinisi dan anaknya.\n" " \n" @@ -3637,24 +3478,6 @@ msgstr "" " ditemui atau sebuah error terjadi." #: builtins.c:709 -#, fuzzy -#| msgid "" -#| "Replace the shell with the given command.\n" -#| " \n" -#| " Execute COMMAND, replacing this shell with the specified program.\n" -#| " ARGUMENTS become the arguments to COMMAND. If COMMAND is not specified,\n" -#| " any redirections take effect in the current shell.\n" -#| " \n" -#| " Options:\n" -#| " -a name\tpass NAME as the zeroth argument to COMMAND\n" -#| " -c\t\texecute COMMAND with an empty environment\n" -#| " -l\t\tplace a dash in the zeroth argument to COMMAND\n" -#| " \n" -#| " If the command cannot be executed, a non-interactive shell exits, unless\n" -#| " the shell option `execfail' is set.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless COMMAND is not found or a redirection error occurs." msgid "" "Replace the shell with the given command.\n" " \n" @@ -3831,27 +3654,6 @@ msgstr "" " Mengembalikan sukses kecuali pengontrol pekerjaan tidak aktif atau sebuah error terjadi." #: builtins.c:810 -#, fuzzy -#| msgid "" -#| "Remember or display program locations.\n" -#| " \n" -#| " Determine and remember the full pathname of each command NAME. If\n" -#| " no arguments are given, information about remembered commands is displayed.\n" -#| " \n" -#| " Options:\n" -#| " -d\t\tforget the remembered location of each NAME\n" -#| " -l\t\tdisplay in a format that may be reused as input\n" -#| " -p pathname\tuse PATHNAME as the full pathname of NAME\n" -#| " -r\t\tforget all remembered locations\n" -#| " -t\t\tprint the remembered location of each NAME, preceding\n" -#| " \t\teach location with the corresponding NAME if multiple\n" -#| " \t\tNAMEs are given\n" -#| " Arguments:\n" -#| " NAME\t\tEach NAME is searched for in $PATH and added to the list\n" -#| " \t\tof remembered commands.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless NAME is not found or an invalid option is given." msgid "" "Remember or display program locations.\n" " \n" @@ -3894,25 +3696,6 @@ msgstr "" " Mengembalikan sukses kecuali NAMA tidak ditemukan atau sebuah pilihan tidak valid telah diberikan." #: builtins.c:835 -#, fuzzy -#| msgid "" -#| "Display information about builtin commands.\n" -#| " \n" -#| " Displays brief summaries of builtin commands. If PATTERN is\n" -#| " specified, gives detailed help on all commands matching PATTERN,\n" -#| " otherwise the list of help topics is printed.\n" -#| " \n" -#| " Options:\n" -#| " -d\toutput short description for each topic\n" -#| " -m\tdisplay usage in pseudo-manpage format\n" -#| " -s\toutput only a short usage synopsis for each topic matching\n" -#| " \tPATTERN\n" -#| " \n" -#| " Arguments:\n" -#| " PATTERN\tPattern specifiying a help topic\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless PATTERN is not found or an invalid option is given." msgid "" "Display information about builtin commands.\n" " \n" @@ -4054,28 +3837,6 @@ msgstr "" " Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau sebuah error terjadi." #: builtins.c:902 -#, fuzzy -#| msgid "" -#| "Display status of jobs.\n" -#| " \n" -#| " Lists the active jobs. JOBSPEC restricts output to that job.\n" -#| " Without options, the status of all active jobs is displayed.\n" -#| " \n" -#| " Options:\n" -#| " -l\tlists process IDs in addition to the normal information\n" -#| " -n\tlist only processes that have changed status since the last\n" -#| " \tnotification\n" -#| " -p\tlists process IDs only\n" -#| " -r\trestrict output to running jobs\n" -#| " -s\trestrict output to stopped jobs\n" -#| " \n" -#| " If -x is supplied, COMMAND is run after all job specifications that\n" -#| " appear in ARGS have been replaced with the process ID of that job's\n" -#| " process group leader.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid option is given or an error occurs.\n" -#| " If -x is used, returns the exit status of COMMAND." msgid "" "Display status of jobs.\n" " \n" @@ -4150,26 +3911,6 @@ msgstr "" " Mengembalikan sukses kecuali ada sebuah pilihan tidak valid atau JOBSPEC diberikan." #: builtins.c:948 -#, fuzzy -#| msgid "" -#| "Send a signal to a job.\n" -#| " \n" -#| " Send the processes identified by PID or JOBSPEC the signal named by\n" -#| " SIGSPEC or SIGNUM. If neither SIGSPEC nor SIGNUM is present, then\n" -#| " SIGTERM is assumed.\n" -#| " \n" -#| " Options:\n" -#| " -s sig\tSIG is a signal name\n" -#| " -n sig\tSIG is a signal number\n" -#| " -l\tlist the signal names; if arguments follow `-l' they are\n" -#| " \tassumed to be signal numbers for which names should be listed\n" -#| " \n" -#| " Kill is a shell builtin for two reasons: it allows job IDs to be used\n" -#| " instead of process IDs, and allows processes to be killed if the limit\n" -#| " on processes that you can create is reached.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid option is given or an error occurs." msgid "" "Send a signal to a job.\n" " \n" @@ -4687,25 +4428,6 @@ msgstr "" " Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan." #: builtins.c:1169 -#, fuzzy -#| msgid "" -#| "Unset values and attributes of shell variables and functions.\n" -#| " \n" -#| " For each NAME, remove the corresponding variable or function.\n" -#| " \n" -#| " Options:\n" -#| " -f\ttreat each NAME as a shell function\n" -#| " -v\ttreat each NAME as a shell variable\n" -#| " -n\ttreat each NAME as a name reference and unset the variable itself\n" -#| " \trather than the variable it references\n" -#| " \n" -#| " Without options, unset first tries to unset a variable, and if that fails,\n" -#| " tries to unset a function.\n" -#| " \n" -#| " Some variables cannot be unset; also see `readonly'.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid option is given or a NAME is read-only." msgid "" "Unset values and attributes of shell variables and functions.\n" " \n" @@ -4742,22 +4464,6 @@ msgstr "" " Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau sebuah NAMA adalah baca-saja." #: builtins.c:1191 -#, fuzzy -#| msgid "" -#| "Set export attribute for shell variables.\n" -#| " \n" -#| " Marks each NAME for automatic export to the environment of subsequently\n" -#| " executed commands. If VALUE is supplied, assign VALUE before exporting.\n" -#| " \n" -#| " Options:\n" -#| " -f\trefer to shell functions\n" -#| " -n\tremove the export property from each NAME\n" -#| " -p\tdisplay a list of all exported variables and functions\n" -#| " \n" -#| " An argument of `--' disables further option processing.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid option is given or NAME is invalid." msgid "" "Set export attribute for shell variables.\n" " \n" @@ -4790,25 +4496,6 @@ msgstr "" " Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau NAMA tidak valid." #: builtins.c:1210 -#, fuzzy -#| msgid "" -#| "Mark shell variables as unchangeable.\n" -#| " \n" -#| " Mark each NAME as read-only; the values of these NAMEs may not be\n" -#| " changed by subsequent assignment. If VALUE is supplied, assign VALUE\n" -#| " before marking as read-only.\n" -#| " \n" -#| " Options:\n" -#| " -a\trefer to indexed array variables\n" -#| " -A\trefer to associative array variables\n" -#| " -f\trefer to shell functions\n" -#| " -p\tdisplay a list of all readonly variables or functions, depending on\n" -#| " whether or not the -f option is given\n" -#| " \n" -#| " An argument of `--' disables further option processing.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless an invalid option is given or NAME is invalid." msgid "" "Mark shell variables as unchangeable.\n" " \n" @@ -4838,7 +4525,8 @@ msgstr "" " -a\tmerujuk ke aray index variabel\n" " -A\tmerujuk ke variabel aray assosiasi\n" " -f\tmerujuk ke fungsi shell\n" -" -p\tmenampilkan sebuah daftar dari seluruh variabel dan fungsi baca-saja\n" +" -p\tmenampilkan sebuah daftar dari seluruh variabel dan fungsi baca-saja,\n" +" \t\ttergantung pada ragu-ragu atau tidak opsi -f diberikan\n" " \n" " Sebuah argumen dari `--' menonaktifkan pemrosesan pilihan selanjutnya.\n" " \n" @@ -4901,18 +4589,6 @@ msgstr "" " NAMA BERKAS tidak dapat dibaca." #: builtins.c:1277 -#, fuzzy -#| msgid "" -#| "Suspend shell execution.\n" -#| " \n" -#| " Suspend the execution of this shell until it receives a SIGCONT signal.\n" -#| " Unless forced, login shells cannot be suspended.\n" -#| " \n" -#| " Options:\n" -#| " -f\tforce the suspend, even if the shell is a login shell\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success unless job control is not enabled or an error occurs." msgid "" "Suspend shell execution.\n" " \n" @@ -4930,10 +4606,12 @@ msgstr "" "Suspend eksekusi shell.\n" " \n" " Suspend eksekusi dari shell ini sampai menerima sebuah sinyal SIGCONT.\n" -" Kecuali dipaksa, login shell tidak dapat disuspend.\n" +" Kecuali dipaksa, login shell dan shell tanpa kerja kontrol tidak dapat\n" +" disuspend.\n" " \n" " Pilihan:\n" -" -f\tpaksa untuk suspend, walaupun jika shell adalah sebuah login shell\n" +" -f\tpaksa untuk suspend, walaupun jika shell adalah sebuah login shell atau kerja\n" +" \t\tkontrol tidak diaktifkan.\n" " \n" " Status Keluar:\n" " Mengembalikan sukses kecuali pengontrol pekerjaan tidak aktif atau sebuah error terjadi." @@ -5797,15 +5475,6 @@ msgstr "" " Mengembalikan status dari perintah terakhir yang dijalankan." #: builtins.c:1702 -#, fuzzy -#| msgid "" -#| "Execute commands as long as a test succeeds.\n" -#| " \n" -#| " Expand and execute COMMANDS as long as the final command in the\n" -#| " `while' COMMANDS has an exit status of zero.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns the status of the last command executed." msgid "" "Execute commands as long as a test succeeds.\n" " \n" @@ -5817,22 +5486,13 @@ msgid "" msgstr "" "Menjalankan perintah sepanjang pemeriksaan sukses.\n" " \n" -" Expand dan jalankan PERINTAH sepanjang akhir perintah dari\n" -" PERINTAH `while' telah memberikan status keluaran nol.\n" +" Expand dan jalankan PERINTAH-2 sepanjang akhir perintah dari\n" +" PERINTAH telah memberikan status keluaran nol.\n" " \n" " Status Keluar:\n" " Mengembalikan status dari perintah terakhir yang dijalankan." #: builtins.c:1714 -#, fuzzy -#| msgid "" -#| "Execute commands as long as a test does not succeed.\n" -#| " \n" -#| " Expand and execute COMMANDS as long as the final command in the\n" -#| " `until' COMMANDS has an exit status which is not zero.\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns the status of the last command executed." msgid "" "Execute commands as long as a test does not succeed.\n" " \n" @@ -5844,8 +5504,9 @@ msgid "" msgstr "" "Menjalankan perintah sepanjang pemeriksaan tidak sukses.\n" " \n" -" Expand dan jalankan PERINTAH sepanjang akhir perintah dari\n" -" PERINTAH `until' telah memberikan status keluaran bukan nol. \n" +" Expand dan jalankan PERINTAH-2 sepanjang akhir perintah dari\n" +" PERINTAH telah memberikan status keluaran bukan nol. \n" +" \n" " Status Keluar:\n" " Mengembalikan status dari perintah terakhir yang dijalankan." @@ -6343,24 +6004,6 @@ msgstr "" " Mengembalikan sukses kecuali ada sebuah pilihan tidak valid diberikan atau sebuah error terjadi." #: builtins.c:1971 -#, fuzzy -#| msgid "" -#| "Set and unset shell options.\n" -#| " \n" -#| " Change the setting of each shell option OPTNAME. Without any option\n" -#| " arguments, list all shell options with an indication of whether or not each\n" -#| " is set.\n" -#| " \n" -#| " Options:\n" -#| " -o\trestrict OPTNAMEs to those defined for use with `set -o'\n" -#| " -p\tprint each shell option with an indication of its status\n" -#| " -q\tsuppress output\n" -#| " -s\tenable (set) each OPTNAME\n" -#| " -u\tdisable (unset) each OPTNAME\n" -#| " \n" -#| " Exit Status:\n" -#| " Returns success if OPTNAME is enabled; fails if an invalid option is\n" -#| " given or OPTNAME is disabled." msgid "" "Set and unset shell options.\n" " \n" @@ -6382,8 +6025,8 @@ msgstr "" "Set dan unset pilihan shell.\n" " \n" " Ubah setting untuk setiap pilihan shell OPTNAME. Tanpa pilihan\n" -" argumen apapun, tampilkan daftar shell pilihan dengan sebuah indikasi\n" -" ya atau tidak setiap pilihan di set.\n" +" argumen apapun, tampilkan setiap OPTNAME yang disuply, atau semua shell pilihan jika tidak ada\n" +" OPTNAME diberikan,dengan sebuah indikasi ya atau tidak setiap pilihan di set.\n" " \n" " Pilihan:\n" " -o\tbatasi OPTNAME ke definisi untuk digunakan dengan `set -o'\n" diff --git a/redir.c b/redir.c index 6893977b..353fa013 100644 --- a/redir.c +++ b/redir.c @@ -1,6 +1,6 @@ /* redir.c -- Functions to perform input and output redirection. */ -/* Copyright (C) 1997-2025 Free Software Foundation, Inc. +/* Copyright (C) 1997-2026 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. diff --git a/subst.c b/subst.c index f54459af..f22a553f 100644 --- a/subst.c +++ b/subst.c @@ -10121,7 +10121,7 @@ parameter_brace_expand (char *string, size_t *indexp, int quoted, int pflags, in sindex = *indexp; t_index = ++sindex; /* ${#var} doesn't have any of the other parameter expansions on it. */ - if (string[t_index] == '#' && legal_variable_starter (string[t_index+1])) /* {{ */ + if (string[t_index] == '#' && legal_variable_starter ((unsigned char)string[t_index+1])) /* {{ */ name = string_extract (string, &t_index, "}", SX_VARNAME); else #if defined (CASEMOD_EXPANSIONS) diff --git a/syntax.h b/syntax.h index eb6f467b..6f68e157 100644 --- a/syntax.h +++ b/syntax.h @@ -1,6 +1,6 @@ /* syntax.h -- Syntax definitions for the shell */ -/* Copyright (C) 2000, 2001, 2005, 2008, 2009-2020 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001, 2005, 2008, 2009-2020, 2026 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. diff --git a/tests/array.right b/tests/array.right index 3ae6c9bf..0b6a1a05 100644 --- a/tests/array.right +++ b/tests/array.right @@ -515,7 +515,7 @@ declare -a e=([0]="Darwin") declare -A a=([0]="a b" ) declare -A b=([0]="/scratch/bash" ) declare -A c=([1]="2" ) -declare -A d=(["a b"]="" ) +declare -A d=([a]="b" ) declare -A e=([Darwin]="" ) array20.sub a+b+c diff --git a/tests/assoc.right b/tests/assoc.right index 4e645ea5..9a407b6a 100644 --- a/tests/assoc.right +++ b/tests/assoc.right @@ -277,20 +277,20 @@ declare -Arx foo=([two]="2" [three]="3" [one]="1" ) assoc12.sub declare -A v1=(["1 2"]="3" ) declare -A v2=(["1 2"]="3" ) -declare -A v3=(["1 2"]="3" ) +declare -A v3=([3]="" [1]="2" ) +declare -A v1=(["1 2"]="3 4 5" ) +declare -A v2=(["1 2"]="3 4 5" ) +declare -A v3=([5]="" [3]="4" [1]="2" ) +declare -A v1=(["1 2"]="3 4 5" ) +declare -A v2=(["1 2"]="3 4 5" ) +declare -A v3=([4]="5" ["1 2"]="3" ) declare -A v1=(["1 2"]="3 4 5" ) declare -A v2=(["1 2"]="3 4 5" ) declare -A v3=(["1 2"]="3 4 5" ) -declare -A v1=(["1 2"]="3 4 5" ) -declare -A v2=(["1 2"]="3 4 5" ) -declare -A v3=(["1 2"]="3 4 5" ) -declare -A v1=(["1 2"]="3 4 5" ) -declare -A v2=(["1 2"]="3 4 5" ) -declare -A v3=(["1 2"]="3 4 5" ) -declare -A v1=(["20 40 80"]="xtra" ["1 2"]="3 4 5" ) +declare -A v1=([80]="xtra" ["1 2"]="3 4 5" [20]="40" ) declare -A v2=(["20 40 80"]="xtra" ["1 2"]="3 4 5" ) declare -A v3=(["1 2"]="3 4 5" ["\$xtra"]="xtra" ) -declare -A v1=(["20 40 80"]="new xtra" ["1 2"]="3 4 5" ) +declare -A v1=([80]="xtra" ["20 40 80"]="new xtra" ["1 2"]="3 4 5" [20]="40" ) declare -A v2=(["20 40 80"]="new xtra" ["1 2"]="3 4 5" ) declare -A v3=(["1 2"]="3 4 5" ["\$xtra"]="new xtra" ) assoc13.sub diff --git a/tests/assoc11.sub b/tests/assoc11.sub index 9d9afae9..688b0931 100644 --- a/tests/assoc11.sub +++ b/tests/assoc11.sub @@ -57,7 +57,7 @@ func loaddict() { dict=( '"' dquote '`' bquote "'" squote '\' bslash) - dict+=( '$' dol @ at * star \{ lbrace \} rbrace ? quest) + dict+=( '$' dol @ at \* star \{ lbrace \} rbrace \? quest) declare -p dict echo dict=\( ${dict[@]@K} \) diff --git a/tests/complete.right b/tests/complete.right index 1b7893b9..16184813 100644 --- a/tests/complete.right +++ b/tests/complete.right @@ -211,6 +211,7 @@ hostcomplete huponexit inherit_errexit interactive_comments +kvpair_split lastpipe lithist localvar_inherit diff --git a/tests/invocation.right b/tests/invocation.right index 39e152b1..562830c1 100644 --- a/tests/invocation.right +++ b/tests/invocation.right @@ -73,9 +73,9 @@ this-bash this-bash $- for -c includes c invocation1.sub bash: line 0: badopt: invalid shell option name -checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath -checkhash:checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath -cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath +checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:kvpair_split:patsub_replacement:progcomp:promptvars:sourcepath +checkhash:checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:kvpair_split:patsub_replacement:progcomp:promptvars:sourcepath +cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:kvpair_split:patsub_replacement:progcomp:promptvars:sourcepath ./invocation1.sub: line 40: BASHOPTS: readonly variable invocation2.sub braceexpand:hashall:interactive-comments diff --git a/tests/shopt.right b/tests/shopt.right index 2d47b575..b0ccf33f 100644 --- a/tests/shopt.right +++ b/tests/shopt.right @@ -40,6 +40,7 @@ shopt -s hostcomplete shopt -u huponexit shopt -u inherit_errexit shopt -s interactive_comments +shopt -s kvpair_split shopt -u lastpipe shopt -u lithist shopt -u localvar_inherit @@ -75,6 +76,7 @@ shopt -s globasciiranges shopt -s globskipdots shopt -s hostcomplete shopt -s interactive_comments +shopt -s kvpair_split shopt -s patsub_replacement shopt -s progcomp shopt -s promptvars @@ -310,5 +312,9 @@ xtrace off -- ./shopt.tests: line 106: shopt: xyz1: invalid shell option name ./shopt.tests: line 107: shopt: xyz1: invalid option name +40c40 +< kvpair_split off +--- +> kvpair_split on expand_aliases on expand_aliases on diff --git a/trap.c b/trap.c index f5aebdc6..a956b3aa 100644 --- a/trap.c +++ b/trap.c @@ -1,7 +1,7 @@ /* trap.c -- Not the trap command, but useful functions for manipulating those objects. The trap command is in builtins/trap.def. */ -/* Copyright (C) 1987-2025 Free Software Foundation, Inc. +/* Copyright (C) 1987-2026 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell.