internal fixes for declare; additional tests for broken wcwidth()

This commit is contained in:
Chet Ramey
2024-02-27 14:40:31 -05:00
parent 43ecbeb31e
commit 9b2a8c6d65
13 changed files with 539 additions and 504 deletions
+19
View File
@@ -8731,3 +8731,22 @@ lib/readline/bind.c
signal. If we are at a point where readline has installed its
signal handlers, check for signals readline handles
From a patch from Grisha Levit <grishalevit@gmail.com>
2/21
----
subst.c
- make_internal_declare: now takes two strings of option arguments:
those to turn on (`-') and those to turn off (`+')
- expand_declaration_argument: simplify the code; handle `-' and `+'
optionsns; always call make_internal_declare
From a patch from Grisha Levit <grishalevit@gmail.com>
2/22
----
aclocal.m4
- add additional character to test for broken wcwidth (0x200b)
lib/readline/display.c
- update_line: use IS_COMBINING_CHAR instead of UNICODE_COMBINING_CHAR
plus WCWIDTH; it doesn't make sense on systems where wcwidth isn't
broken
Vendored
+3
View File
@@ -1816,6 +1816,9 @@ main(int c, char **v)
setlocale(LC_ALL, "en_US.UTF-8");
w = wcwidth (0x0301);
if (w != 0)
exit (0);
w = wcwidth (0x200b);
exit (w == 0); /* exit 0 if wcwidth broken */
}
]])], [bash_cv_wcwidth_broken=yes], [bash_cv_wcwidth_broken=no],
+4 -3
View File
@@ -63,9 +63,10 @@ current soft limit, the current hard limit, and no limit, respectively.
Otherwise, the current value of the specified resource is printed. If
no option is given, then -f is assumed.
Values are in 1024-byte increments, except for -t, which is in seconds,
-p, which is in increments of 512 bytes, and -u, which is an unscaled
number of processes.
Values are in 1024-byte increments, except for -t, which is in seconds;
-p, which is in increments of 512 bytes; -R, which is in microseconds;
-b, which is in bytes; and -e, -i, -k, -n, -q, -r, -u, -x, and -P,
which accept unscaled values.
Exit Status:
Returns success unless an invalid option is supplied or an error occurs.
Vendored
+3
View File
@@ -16888,6 +16888,9 @@ main(int c, char **v)
setlocale(LC_ALL, "en_US.UTF-8");
w = wcwidth (0x0301);
if (w != 0)
exit (0);
w = wcwidth (0x200b);
exit (w == 0); /* exit 0 if wcwidth broken */
}
+14 -12
View File
@@ -1263,17 +1263,19 @@ PPAARRAAMMEETTEERRSS
HHIISSTTSSIIZZEE after reading any startup files.
HHIISSTTIIGGNNOORREE
A colon-separated list of patterns used to decide which command
lines should be saved on the history list. Each pattern is an-
chored at the beginning of the line and must match the complete
line (bbaasshh will not implicitly append a "**"). Each pattern is
tested against the line after the checks specified by HHIISSTTCCOONN--
TTRROOLL are applied. In addition to the normal shell pattern
matching characters, "&&" matches the previous history line. A
backslash will escape the "&&"; the backslash is removed before
attempting a match. The second and subsequent lines of a multi-
line compound command are not tested, and are added to the his-
tory regardless of the value of HHIISSTTIIGGNNOORREE. The pattern match-
ing honors the setting of the eexxttgglloobb shell option.
lines should be saved on the history list. If a command line
matches one of the patterns in the value of HHIISSTTIIGGNNOORREE, it is
not saved on the history list. Each pattern is anchored at the
beginning of the line and must match the complete line (bbaasshh
will not implicitly append a "**"). Each pattern is tested
against the line after the checks specified by HHIISSTTCCOONNTTRROOLL are
applied. In addition to the normal shell pattern matching char-
acters, "&&" matches the previous history line. A backslash will
escape the "&&"; the backslash is removed before attempting a
match. The second and subsequent lines of a multi-line compound
command are not tested, and are added to the history regardless
of the value of HHIISSTTIIGGNNOORREE. The pattern matching honors the
setting of the eexxttgglloobb shell option.
HHIISSTTSSIIZZEE
The number of commands to remember in the command history (see
HHIISSTTOORRYY below). If the value is 0, commands are not saved in
@@ -6891,4 +6893,4 @@ BBUUGGSS
There may be only one active coprocess at a time.
GNU Bash 5.3 2024 February 5 _B_A_S_H(1)
GNU Bash 5.3 2024 February 19 _B_A_S_H(1)
+196 -194
View File
@@ -1,9 +1,9 @@
This is bash.info, produced by makeinfo version 7.1 from bashref.texi.
This text is a brief description of the features that are present in the
Bash shell (version 5.3, 2 February 2024).
Bash shell (version 5.3, 19 February 2024).
This is Edition 5.3, last updated 2 February 2024, of The GNU Bash
This is Edition 5.3, last updated 19 February 2024, of The GNU Bash
Reference Manual, for Bash, Version 5.3.
Copyright © 1988-2023 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, 2 February 2024). The Bash home page is
Bash shell (version 5.3, 19 February 2024). The Bash home page is
<http://www.gnu.org/software/bash/>.
This is Edition 5.3, last updated 2 February 2024, of The GNU Bash
This is Edition 5.3, last updated 19 February 2024, of The GNU Bash
Reference Manual, for Bash, Version 5.3.
Bash contains features that appear in other popular shells, and some
@@ -5792,17 +5792,19 @@ Variables::).
HISTIGNORE
A colon-separated list of patterns used to decide which command
lines should be saved on the history list. Each pattern is
anchored at the beginning of the line and must match the complete
line (Bash will not implicitly append a *). Each pattern is
tested against the line after the checks specified by HISTCONTROL
are applied. In addition to the normal shell pattern matching
characters, & matches the previous history line. & may be
escaped using a backslash; the backslash is removed before
attempting a match. The second and subsequent lines of a
multi-line compound command are not tested, and are added to the
history regardless of the value of HISTIGNORE. The pattern
matching honors the setting of the extglob shell option.
lines should be saved on the history list. If a command line
matches one of the patterns in the value of HISTIGNORE, it is not
saved on the history list. Each pattern is anchored at the
beginning of the line and must match the complete line (Bash will
not implicitly append a *). Each pattern is tested against the
line after the checks specified by HISTCONTROL are applied. In
addition to the normal shell pattern matching characters, &
matches the previous history line. & may be escaped using a
backslash; the backslash is removed before attempting a match. The
second and subsequent lines of a multi-line compound command are
not tested, and are added to the history regardless of the value of
HISTIGNORE. The pattern matching honors the setting of the
extglob shell option.
HISTIGNORE subsumes the function of HISTCONTROL. A pattern of
& is identical to ignoredups, and a pattern of [ ]* is
@@ -12423,46 +12425,46 @@ D.3 Parameter and Variable Index
(line 214)
* history-size: Readline Init File Syntax.
(line 220)
* HISTSIZE: Bash Variables. (line 478)
* HISTTIMEFORMAT: Bash Variables. (line 485)
* HISTSIZE: Bash Variables. (line 480)
* HISTTIMEFORMAT: Bash Variables. (line 487)
* HOME: Bourne Shell Variables.
(line 13)
* horizontal-scroll-mode: Readline Init File Syntax.
(line 229)
* HOSTFILE: Bash Variables. (line 494)
* HOSTNAME: Bash Variables. (line 505)
* HOSTTYPE: Bash Variables. (line 508)
* HOSTFILE: Bash Variables. (line 496)
* HOSTNAME: Bash Variables. (line 507)
* HOSTTYPE: Bash Variables. (line 510)
* IFS: Bourne Shell Variables.
(line 18)
* IGNOREEOF: Bash Variables. (line 511)
* IGNOREEOF: Bash Variables. (line 513)
* input-meta: Readline Init File Syntax.
(line 238)
* INPUTRC: Bash Variables. (line 521)
* INSIDE_EMACS: Bash Variables. (line 525)
* INPUTRC: Bash Variables. (line 523)
* INSIDE_EMACS: Bash Variables. (line 527)
* isearch-terminators: Readline Init File Syntax.
(line 248)
* keymap: Readline Init File Syntax.
(line 255)
* LANG: Creating Internationalized Scripts.
(line 51)
* LANG <1>: Bash Variables. (line 531)
* LC_ALL: Bash Variables. (line 535)
* LC_COLLATE: Bash Variables. (line 539)
* LC_CTYPE: Bash Variables. (line 546)
* LANG <1>: Bash Variables. (line 533)
* LC_ALL: Bash Variables. (line 537)
* LC_COLLATE: Bash Variables. (line 541)
* LC_CTYPE: Bash Variables. (line 548)
* LC_MESSAGES: Creating Internationalized Scripts.
(line 51)
* LC_MESSAGES <1>: Bash Variables. (line 551)
* LC_NUMERIC: Bash Variables. (line 555)
* LC_TIME: Bash Variables. (line 559)
* LINENO: Bash Variables. (line 563)
* LINES: Bash Variables. (line 568)
* MACHTYPE: Bash Variables. (line 574)
* LC_MESSAGES <1>: Bash Variables. (line 553)
* LC_NUMERIC: Bash Variables. (line 557)
* LC_TIME: Bash Variables. (line 561)
* LINENO: Bash Variables. (line 565)
* LINES: Bash Variables. (line 570)
* MACHTYPE: Bash Variables. (line 576)
* MAIL: Bourne Shell Variables.
(line 22)
* MAILCHECK: Bash Variables. (line 578)
* MAILCHECK: Bash Variables. (line 580)
* MAILPATH: Bourne Shell Variables.
(line 27)
* MAPFILE: Bash Variables. (line 586)
* MAPFILE: Bash Variables. (line 588)
* mark-modified-lines: Readline Init File Syntax.
(line 285)
* mark-symlinked-directories: Readline Init File Syntax.
@@ -12473,46 +12475,46 @@ D.3 Parameter and Variable Index
(line 302)
* meta-flag: Readline Init File Syntax.
(line 238)
* OLDPWD: Bash Variables. (line 590)
* OLDPWD: Bash Variables. (line 592)
* OPTARG: Bourne Shell Variables.
(line 34)
* OPTERR: Bash Variables. (line 593)
* OPTERR: Bash Variables. (line 595)
* OPTIND: Bourne Shell Variables.
(line 38)
* OSTYPE: Bash Variables. (line 597)
* OSTYPE: Bash Variables. (line 599)
* output-meta: Readline Init File Syntax.
(line 307)
* page-completions: Readline Init File Syntax.
(line 315)
* PATH: Bourne Shell Variables.
(line 42)
* PIPESTATUS: Bash Variables. (line 600)
* POSIXLY_CORRECT: Bash Variables. (line 605)
* PPID: Bash Variables. (line 615)
* PROMPT_COMMAND: Bash Variables. (line 619)
* PROMPT_DIRTRIM: Bash Variables. (line 625)
* PS0: Bash Variables. (line 631)
* PIPESTATUS: Bash Variables. (line 602)
* POSIXLY_CORRECT: Bash Variables. (line 607)
* PPID: Bash Variables. (line 617)
* PROMPT_COMMAND: Bash Variables. (line 621)
* PROMPT_DIRTRIM: Bash Variables. (line 627)
* PS0: Bash Variables. (line 633)
* PS1: Bourne Shell Variables.
(line 48)
* PS2: Bourne Shell Variables.
(line 53)
* PS3: Bash Variables. (line 636)
* PS4: Bash Variables. (line 641)
* PWD: Bash Variables. (line 649)
* RANDOM: Bash Variables. (line 652)
* READLINE_ARGUMENT: Bash Variables. (line 658)
* READLINE_LINE: Bash Variables. (line 662)
* READLINE_MARK: Bash Variables. (line 666)
* READLINE_POINT: Bash Variables. (line 672)
* REPLY: Bash Variables. (line 676)
* PS3: Bash Variables. (line 638)
* PS4: Bash Variables. (line 643)
* PWD: Bash Variables. (line 651)
* RANDOM: Bash Variables. (line 654)
* READLINE_ARGUMENT: Bash Variables. (line 660)
* READLINE_LINE: Bash Variables. (line 664)
* READLINE_MARK: Bash Variables. (line 668)
* READLINE_POINT: Bash Variables. (line 674)
* REPLY: Bash Variables. (line 678)
* revert-all-at-newline: Readline Init File Syntax.
(line 325)
* search-ignore-case: Readline Init File Syntax.
(line 332)
* SECONDS: Bash Variables. (line 679)
* SHELL: Bash Variables. (line 688)
* SHELLOPTS: Bash Variables. (line 693)
* SHLVL: Bash Variables. (line 702)
* SECONDS: Bash Variables. (line 681)
* SHELL: Bash Variables. (line 690)
* SHELLOPTS: Bash Variables. (line 695)
* SHLVL: Bash Variables. (line 704)
* show-all-if-ambiguous: Readline Init File Syntax.
(line 337)
* show-all-if-unmodified: Readline Init File Syntax.
@@ -12521,15 +12523,15 @@ D.3 Parameter and Variable Index
(line 352)
* skip-completed-text: Readline Init File Syntax.
(line 358)
* SRANDOM: Bash Variables. (line 707)
* SRANDOM: Bash Variables. (line 709)
* TEXTDOMAIN: Creating Internationalized Scripts.
(line 51)
* TEXTDOMAINDIR: Creating Internationalized Scripts.
(line 51)
* TIMEFORMAT: Bash Variables. (line 716)
* TMOUT: Bash Variables. (line 754)
* TMPDIR: Bash Variables. (line 766)
* UID: Bash Variables. (line 770)
* TIMEFORMAT: Bash Variables. (line 718)
* TMOUT: Bash Variables. (line 756)
* TMPDIR: Bash Variables. (line 768)
* UID: Bash Variables. (line 772)
* vi-cmd-mode-string: Readline Init File Syntax.
(line 371)
* vi-ins-mode-string: Readline Init File Syntax.
@@ -12921,138 +12923,138 @@ D.5 Concept Index

Tag Table:
Node: Top899
Node: Introduction2838
Node: What is Bash?3051
Node: What is a shell?4192
Node: Definitions6771
Node: Basic Shell Features9947
Node: Shell Syntax11167
Node: Shell Operation12194
Node: Quoting13492
Node: Escape Character14805
Node: Single Quotes15303
Node: Double Quotes15652
Node: ANSI-C Quoting16995
Node: Locale Translation18380
Node: Creating Internationalized Scripts19724
Node: Comments23922
Node: Shell Commands24557
Node: Reserved Words25496
Node: Simple Commands26361
Node: Pipelines27020
Node: Lists30083
Node: Compound Commands31955
Node: Looping Constructs32964
Node: Conditional Constructs35508
Node: Command Grouping50412
Node: Coprocesses51899
Node: GNU Parallel54595
Node: Shell Functions55513
Node: Shell Parameters63619
Node: Positional Parameters68152
Node: Special Parameters69087
Node: Shell Expansions72394
Node: Brace Expansion74583
Node: Tilde Expansion77246
Node: Shell Parameter Expansion80012
Node: Command Substitution99036
Node: Arithmetic Expansion102569
Node: Process Substitution103534
Node: Word Splitting104671
Node: Filename Expansion106812
Node: Pattern Matching109908
Node: Quote Removal115141
Node: Redirections115445
Node: Executing Commands125254
Node: Simple Command Expansion125921
Node: Command Search and Execution128032
Node: Command Execution Environment130440
Node: Environment133749
Node: Exit Status135453
Node: Signals137238
Node: Shell Scripts140852
Node: Shell Builtin Commands143944
Node: Bourne Shell Builtins146055
Node: Bash Builtins170459
Node: Modifying Shell Behavior205064
Node: The Set Builtin205406
Node: The Shopt Builtin216921
Node: Special Builtins233657
Node: Shell Variables234646
Node: Bourne Shell Variables235080
Node: Bash Variables237273
Node: Bash Features273695
Node: Invoking Bash274709
Node: Bash Startup Files281108
Node: Interactive Shells286420
Node: What is an Interactive Shell?286828
Node: Is this Shell Interactive?287494
Node: Interactive Shell Behavior288318
Node: Bash Conditional Expressions292072
Node: Shell Arithmetic297246
Node: Aliases300328
Node: Arrays303283
Node: The Directory Stack310082
Node: Directory Stack Builtins310879
Node: Controlling the Prompt315328
Node: The Restricted Shell318466
Node: Bash POSIX Mode321253
Node: Shell Compatibility Mode338734
Node: Job Control347220
Node: Job Control Basics347677
Node: Job Control Builtins352851
Node: Job Control Variables358811
Node: Command Line Editing359988
Node: Introduction and Notation361692
Node: Readline Interaction363336
Node: Readline Bare Essentials364524
Node: Readline Movement Commands366342
Node: Readline Killing Commands367339
Node: Readline Arguments369317
Node: Searching370374
Node: Readline Init File372603
Node: Readline Init File Syntax373885
Node: Conditional Init Constructs398823
Node: Sample Init File403188
Node: Bindable Readline Commands406309
Node: Commands For Moving407534
Node: Commands For History409634
Node: Commands For Text414717
Node: Commands For Killing418792
Node: Numeric Arguments421593
Node: Commands For Completion422745
Node: Keyboard Macros427061
Node: Miscellaneous Commands427762
Node: Readline vi Mode434416
Node: Programmable Completion435368
Node: Programmable Completion Builtins443325
Node: A Programmable Completion Example454891
Node: Using History Interactively460236
Node: Bash History Facilities460917
Node: Bash History Builtins464029
Node: History Interaction469272
Node: Event Designators473597
Node: Word Designators475180
Node: Modifiers477166
Node: Installing Bash479075
Node: Basic Installation480209
Node: Compilers and Options484088
Node: Compiling For Multiple Architectures484838
Node: Installation Names486587
Node: Specifying the System Type488821
Node: Sharing Defaults489567
Node: Operation Controls490281
Node: Optional Features491300
Node: Reporting Bugs503102
Node: Major Differences From The Bourne Shell504451
Node: GNU Free Documentation License522260
Node: Indexes547437
Node: Builtin Index547888
Node: Reserved Word Index554986
Node: Variable Index557431
Node: Function Index574562
Node: Concept Index588418
Node: Top901
Node: Introduction2842
Node: What is Bash?3055
Node: What is a shell?4196
Node: Definitions6775
Node: Basic Shell Features9951
Node: Shell Syntax11171
Node: Shell Operation12198
Node: Quoting13496
Node: Escape Character14809
Node: Single Quotes15307
Node: Double Quotes15656
Node: ANSI-C Quoting16999
Node: Locale Translation18384
Node: Creating Internationalized Scripts19728
Node: Comments23926
Node: Shell Commands24561
Node: Reserved Words25500
Node: Simple Commands26365
Node: Pipelines27024
Node: Lists30087
Node: Compound Commands31959
Node: Looping Constructs32968
Node: Conditional Constructs35512
Node: Command Grouping50416
Node: Coprocesses51903
Node: GNU Parallel54599
Node: Shell Functions55517
Node: Shell Parameters63623
Node: Positional Parameters68156
Node: Special Parameters69091
Node: Shell Expansions72398
Node: Brace Expansion74587
Node: Tilde Expansion77250
Node: Shell Parameter Expansion80016
Node: Command Substitution99040
Node: Arithmetic Expansion102573
Node: Process Substitution103538
Node: Word Splitting104675
Node: Filename Expansion106816
Node: Pattern Matching109912
Node: Quote Removal115145
Node: Redirections115449
Node: Executing Commands125258
Node: Simple Command Expansion125925
Node: Command Search and Execution128036
Node: Command Execution Environment130444
Node: Environment133753
Node: Exit Status135457
Node: Signals137242
Node: Shell Scripts140856
Node: Shell Builtin Commands143948
Node: Bourne Shell Builtins146059
Node: Bash Builtins170463
Node: Modifying Shell Behavior205068
Node: The Set Builtin205410
Node: The Shopt Builtin216925
Node: Special Builtins233661
Node: Shell Variables234650
Node: Bourne Shell Variables235084
Node: Bash Variables237277
Node: Bash Features273827
Node: Invoking Bash274841
Node: Bash Startup Files281240
Node: Interactive Shells286552
Node: What is an Interactive Shell?286960
Node: Is this Shell Interactive?287626
Node: Interactive Shell Behavior288450
Node: Bash Conditional Expressions292204
Node: Shell Arithmetic297378
Node: Aliases300460
Node: Arrays303415
Node: The Directory Stack310214
Node: Directory Stack Builtins311011
Node: Controlling the Prompt315460
Node: The Restricted Shell318598
Node: Bash POSIX Mode321385
Node: Shell Compatibility Mode338866
Node: Job Control347352
Node: Job Control Basics347809
Node: Job Control Builtins352983
Node: Job Control Variables358943
Node: Command Line Editing360120
Node: Introduction and Notation361824
Node: Readline Interaction363468
Node: Readline Bare Essentials364656
Node: Readline Movement Commands366474
Node: Readline Killing Commands367471
Node: Readline Arguments369449
Node: Searching370506
Node: Readline Init File372735
Node: Readline Init File Syntax374017
Node: Conditional Init Constructs398955
Node: Sample Init File403320
Node: Bindable Readline Commands406441
Node: Commands For Moving407666
Node: Commands For History409766
Node: Commands For Text414849
Node: Commands For Killing418924
Node: Numeric Arguments421725
Node: Commands For Completion422877
Node: Keyboard Macros427193
Node: Miscellaneous Commands427894
Node: Readline vi Mode434548
Node: Programmable Completion435500
Node: Programmable Completion Builtins443457
Node: A Programmable Completion Example455023
Node: Using History Interactively460368
Node: Bash History Facilities461049
Node: Bash History Builtins464161
Node: History Interaction469404
Node: Event Designators473729
Node: Word Designators475312
Node: Modifiers477298
Node: Installing Bash479207
Node: Basic Installation480341
Node: Compilers and Options484220
Node: Compiling For Multiple Architectures484970
Node: Installation Names486719
Node: Specifying the System Type488953
Node: Sharing Defaults489699
Node: Operation Controls490413
Node: Optional Features491432
Node: Reporting Bugs503234
Node: Major Differences From The Bourne Shell504583
Node: GNU Free Documentation License522392
Node: Indexes547569
Node: Builtin Index548020
Node: Reserved Word Index555118
Node: Variable Index557563
Node: Function Index574694
Node: Concept Index588550

End Tag Table
+196 -194
View File
@@ -2,9 +2,9 @@ This is bashref.info, produced by makeinfo version 7.1 from
bashref.texi.
This text is a brief description of the features that are present in the
Bash shell (version 5.3, 2 February 2024).
Bash shell (version 5.3, 19 February 2024).
This is Edition 5.3, last updated 2 February 2024, of The GNU Bash
This is Edition 5.3, last updated 19 February 2024, of The GNU Bash
Reference Manual, for Bash, Version 5.3.
Copyright © 1988-2023 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, 2 February 2024). The Bash home page is
Bash shell (version 5.3, 19 February 2024). The Bash home page is
<http://www.gnu.org/software/bash/>.
This is Edition 5.3, last updated 2 February 2024, of The GNU Bash
This is Edition 5.3, last updated 19 February 2024, of The GNU Bash
Reference Manual, for Bash, Version 5.3.
Bash contains features that appear in other popular shells, and some
@@ -5793,17 +5793,19 @@ Variables::).
HISTIGNORE
A colon-separated list of patterns used to decide which command
lines should be saved on the history list. Each pattern is
anchored at the beginning of the line and must match the complete
line (Bash will not implicitly append a *). Each pattern is
tested against the line after the checks specified by HISTCONTROL
are applied. In addition to the normal shell pattern matching
characters, & matches the previous history line. & may be
escaped using a backslash; the backslash is removed before
attempting a match. The second and subsequent lines of a
multi-line compound command are not tested, and are added to the
history regardless of the value of HISTIGNORE. The pattern
matching honors the setting of the extglob shell option.
lines should be saved on the history list. If a command line
matches one of the patterns in the value of HISTIGNORE, it is not
saved on the history list. Each pattern is anchored at the
beginning of the line and must match the complete line (Bash will
not implicitly append a *). Each pattern is tested against the
line after the checks specified by HISTCONTROL are applied. In
addition to the normal shell pattern matching characters, &
matches the previous history line. & may be escaped using a
backslash; the backslash is removed before attempting a match. The
second and subsequent lines of a multi-line compound command are
not tested, and are added to the history regardless of the value of
HISTIGNORE. The pattern matching honors the setting of the
extglob shell option.
HISTIGNORE subsumes the function of HISTCONTROL. A pattern of
& is identical to ignoredups, and a pattern of [ ]* is
@@ -12424,46 +12426,46 @@ D.3 Parameter and Variable Index
(line 214)
* history-size: Readline Init File Syntax.
(line 220)
* HISTSIZE: Bash Variables. (line 478)
* HISTTIMEFORMAT: Bash Variables. (line 485)
* HISTSIZE: Bash Variables. (line 480)
* HISTTIMEFORMAT: Bash Variables. (line 487)
* HOME: Bourne Shell Variables.
(line 13)
* horizontal-scroll-mode: Readline Init File Syntax.
(line 229)
* HOSTFILE: Bash Variables. (line 494)
* HOSTNAME: Bash Variables. (line 505)
* HOSTTYPE: Bash Variables. (line 508)
* HOSTFILE: Bash Variables. (line 496)
* HOSTNAME: Bash Variables. (line 507)
* HOSTTYPE: Bash Variables. (line 510)
* IFS: Bourne Shell Variables.
(line 18)
* IGNOREEOF: Bash Variables. (line 511)
* IGNOREEOF: Bash Variables. (line 513)
* input-meta: Readline Init File Syntax.
(line 238)
* INPUTRC: Bash Variables. (line 521)
* INSIDE_EMACS: Bash Variables. (line 525)
* INPUTRC: Bash Variables. (line 523)
* INSIDE_EMACS: Bash Variables. (line 527)
* isearch-terminators: Readline Init File Syntax.
(line 248)
* keymap: Readline Init File Syntax.
(line 255)
* LANG: Creating Internationalized Scripts.
(line 51)
* LANG <1>: Bash Variables. (line 531)
* LC_ALL: Bash Variables. (line 535)
* LC_COLLATE: Bash Variables. (line 539)
* LC_CTYPE: Bash Variables. (line 546)
* LANG <1>: Bash Variables. (line 533)
* LC_ALL: Bash Variables. (line 537)
* LC_COLLATE: Bash Variables. (line 541)
* LC_CTYPE: Bash Variables. (line 548)
* LC_MESSAGES: Creating Internationalized Scripts.
(line 51)
* LC_MESSAGES <1>: Bash Variables. (line 551)
* LC_NUMERIC: Bash Variables. (line 555)
* LC_TIME: Bash Variables. (line 559)
* LINENO: Bash Variables. (line 563)
* LINES: Bash Variables. (line 568)
* MACHTYPE: Bash Variables. (line 574)
* LC_MESSAGES <1>: Bash Variables. (line 553)
* LC_NUMERIC: Bash Variables. (line 557)
* LC_TIME: Bash Variables. (line 561)
* LINENO: Bash Variables. (line 565)
* LINES: Bash Variables. (line 570)
* MACHTYPE: Bash Variables. (line 576)
* MAIL: Bourne Shell Variables.
(line 22)
* MAILCHECK: Bash Variables. (line 578)
* MAILCHECK: Bash Variables. (line 580)
* MAILPATH: Bourne Shell Variables.
(line 27)
* MAPFILE: Bash Variables. (line 586)
* MAPFILE: Bash Variables. (line 588)
* mark-modified-lines: Readline Init File Syntax.
(line 285)
* mark-symlinked-directories: Readline Init File Syntax.
@@ -12474,46 +12476,46 @@ D.3 Parameter and Variable Index
(line 302)
* meta-flag: Readline Init File Syntax.
(line 238)
* OLDPWD: Bash Variables. (line 590)
* OLDPWD: Bash Variables. (line 592)
* OPTARG: Bourne Shell Variables.
(line 34)
* OPTERR: Bash Variables. (line 593)
* OPTERR: Bash Variables. (line 595)
* OPTIND: Bourne Shell Variables.
(line 38)
* OSTYPE: Bash Variables. (line 597)
* OSTYPE: Bash Variables. (line 599)
* output-meta: Readline Init File Syntax.
(line 307)
* page-completions: Readline Init File Syntax.
(line 315)
* PATH: Bourne Shell Variables.
(line 42)
* PIPESTATUS: Bash Variables. (line 600)
* POSIXLY_CORRECT: Bash Variables. (line 605)
* PPID: Bash Variables. (line 615)
* PROMPT_COMMAND: Bash Variables. (line 619)
* PROMPT_DIRTRIM: Bash Variables. (line 625)
* PS0: Bash Variables. (line 631)
* PIPESTATUS: Bash Variables. (line 602)
* POSIXLY_CORRECT: Bash Variables. (line 607)
* PPID: Bash Variables. (line 617)
* PROMPT_COMMAND: Bash Variables. (line 621)
* PROMPT_DIRTRIM: Bash Variables. (line 627)
* PS0: Bash Variables. (line 633)
* PS1: Bourne Shell Variables.
(line 48)
* PS2: Bourne Shell Variables.
(line 53)
* PS3: Bash Variables. (line 636)
* PS4: Bash Variables. (line 641)
* PWD: Bash Variables. (line 649)
* RANDOM: Bash Variables. (line 652)
* READLINE_ARGUMENT: Bash Variables. (line 658)
* READLINE_LINE: Bash Variables. (line 662)
* READLINE_MARK: Bash Variables. (line 666)
* READLINE_POINT: Bash Variables. (line 672)
* REPLY: Bash Variables. (line 676)
* PS3: Bash Variables. (line 638)
* PS4: Bash Variables. (line 643)
* PWD: Bash Variables. (line 651)
* RANDOM: Bash Variables. (line 654)
* READLINE_ARGUMENT: Bash Variables. (line 660)
* READLINE_LINE: Bash Variables. (line 664)
* READLINE_MARK: Bash Variables. (line 668)
* READLINE_POINT: Bash Variables. (line 674)
* REPLY: Bash Variables. (line 678)
* revert-all-at-newline: Readline Init File Syntax.
(line 325)
* search-ignore-case: Readline Init File Syntax.
(line 332)
* SECONDS: Bash Variables. (line 679)
* SHELL: Bash Variables. (line 688)
* SHELLOPTS: Bash Variables. (line 693)
* SHLVL: Bash Variables. (line 702)
* SECONDS: Bash Variables. (line 681)
* SHELL: Bash Variables. (line 690)
* SHELLOPTS: Bash Variables. (line 695)
* SHLVL: Bash Variables. (line 704)
* show-all-if-ambiguous: Readline Init File Syntax.
(line 337)
* show-all-if-unmodified: Readline Init File Syntax.
@@ -12522,15 +12524,15 @@ D.3 Parameter and Variable Index
(line 352)
* skip-completed-text: Readline Init File Syntax.
(line 358)
* SRANDOM: Bash Variables. (line 707)
* SRANDOM: Bash Variables. (line 709)
* TEXTDOMAIN: Creating Internationalized Scripts.
(line 51)
* TEXTDOMAINDIR: Creating Internationalized Scripts.
(line 51)
* TIMEFORMAT: Bash Variables. (line 716)
* TMOUT: Bash Variables. (line 754)
* TMPDIR: Bash Variables. (line 766)
* UID: Bash Variables. (line 770)
* TIMEFORMAT: Bash Variables. (line 718)
* TMOUT: Bash Variables. (line 756)
* TMPDIR: Bash Variables. (line 768)
* UID: Bash Variables. (line 772)
* vi-cmd-mode-string: Readline Init File Syntax.
(line 371)
* vi-ins-mode-string: Readline Init File Syntax.
@@ -12922,138 +12924,138 @@ D.5 Concept Index

Tag Table:
Node: Top902
Node: Introduction2844
Node: What is Bash?3060
Node: What is a shell?4204
Node: Definitions6786
Node: Basic Shell Features9965
Node: Shell Syntax11188
Node: Shell Operation12218
Node: Quoting13519
Node: Escape Character14835
Node: Single Quotes15336
Node: Double Quotes15688
Node: ANSI-C Quoting17034
Node: Locale Translation18422
Node: Creating Internationalized Scripts19769
Node: Comments23970
Node: Shell Commands24608
Node: Reserved Words25550
Node: Simple Commands26418
Node: Pipelines27080
Node: Lists30146
Node: Compound Commands32021
Node: Looping Constructs33033
Node: Conditional Constructs35580
Node: Command Grouping50487
Node: Coprocesses51977
Node: GNU Parallel54676
Node: Shell Functions55597
Node: Shell Parameters63706
Node: Positional Parameters68242
Node: Special Parameters69180
Node: Shell Expansions72490
Node: Brace Expansion74682
Node: Tilde Expansion77348
Node: Shell Parameter Expansion80117
Node: Command Substitution99144
Node: Arithmetic Expansion102680
Node: Process Substitution103648
Node: Word Splitting104788
Node: Filename Expansion106932
Node: Pattern Matching110031
Node: Quote Removal115267
Node: Redirections115574
Node: Executing Commands125386
Node: Simple Command Expansion126056
Node: Command Search and Execution128170
Node: Command Execution Environment130581
Node: Environment133893
Node: Exit Status135600
Node: Signals137388
Node: Shell Scripts141005
Node: Shell Builtin Commands144100
Node: Bourne Shell Builtins146214
Node: Bash Builtins170621
Node: Modifying Shell Behavior205229
Node: The Set Builtin205574
Node: The Shopt Builtin217092
Node: Special Builtins233831
Node: Shell Variables234823
Node: Bourne Shell Variables235260
Node: Bash Variables237456
Node: Bash Features273881
Node: Invoking Bash274898
Node: Bash Startup Files281300
Node: Interactive Shells286615
Node: What is an Interactive Shell?287026
Node: Is this Shell Interactive?287695
Node: Interactive Shell Behavior288522
Node: Bash Conditional Expressions292279
Node: Shell Arithmetic297456
Node: Aliases300541
Node: Arrays303499
Node: The Directory Stack310301
Node: Directory Stack Builtins311101
Node: Controlling the Prompt315553
Node: The Restricted Shell318694
Node: Bash POSIX Mode321484
Node: Shell Compatibility Mode338968
Node: Job Control347457
Node: Job Control Basics347917
Node: Job Control Builtins353094
Node: Job Control Variables359057
Node: Command Line Editing360237
Node: Introduction and Notation361944
Node: Readline Interaction363591
Node: Readline Bare Essentials364782
Node: Readline Movement Commands366603
Node: Readline Killing Commands367603
Node: Readline Arguments369584
Node: Searching370644
Node: Readline Init File372876
Node: Readline Init File Syntax374161
Node: Conditional Init Constructs399102
Node: Sample Init File403470
Node: Bindable Readline Commands406594
Node: Commands For Moving407822
Node: Commands For History409925
Node: Commands For Text415011
Node: Commands For Killing419089
Node: Numeric Arguments421893
Node: Commands For Completion423048
Node: Keyboard Macros427367
Node: Miscellaneous Commands428071
Node: Readline vi Mode434728
Node: Programmable Completion435683
Node: Programmable Completion Builtins443643
Node: A Programmable Completion Example455212
Node: Using History Interactively460560
Node: Bash History Facilities461244
Node: Bash History Builtins464359
Node: History Interaction469605
Node: Event Designators473933
Node: Word Designators475519
Node: Modifiers477508
Node: Installing Bash479420
Node: Basic Installation480557
Node: Compilers and Options484439
Node: Compiling For Multiple Architectures485192
Node: Installation Names486944
Node: Specifying the System Type489181
Node: Sharing Defaults489930
Node: Operation Controls490647
Node: Optional Features491669
Node: Reporting Bugs503474
Node: Major Differences From The Bourne Shell504826
Node: GNU Free Documentation License522638
Node: Indexes547818
Node: Builtin Index548272
Node: Reserved Word Index555373
Node: Variable Index557821
Node: Function Index574955
Node: Concept Index588814
Node: Top904
Node: Introduction2848
Node: What is Bash?3064
Node: What is a shell?4208
Node: Definitions6790
Node: Basic Shell Features9969
Node: Shell Syntax11192
Node: Shell Operation12222
Node: Quoting13523
Node: Escape Character14839
Node: Single Quotes15340
Node: Double Quotes15692
Node: ANSI-C Quoting17038
Node: Locale Translation18426
Node: Creating Internationalized Scripts19773
Node: Comments23974
Node: Shell Commands24612
Node: Reserved Words25554
Node: Simple Commands26422
Node: Pipelines27084
Node: Lists30150
Node: Compound Commands32025
Node: Looping Constructs33037
Node: Conditional Constructs35584
Node: Command Grouping50491
Node: Coprocesses51981
Node: GNU Parallel54680
Node: Shell Functions55601
Node: Shell Parameters63710
Node: Positional Parameters68246
Node: Special Parameters69184
Node: Shell Expansions72494
Node: Brace Expansion74686
Node: Tilde Expansion77352
Node: Shell Parameter Expansion80121
Node: Command Substitution99148
Node: Arithmetic Expansion102684
Node: Process Substitution103652
Node: Word Splitting104792
Node: Filename Expansion106936
Node: Pattern Matching110035
Node: Quote Removal115271
Node: Redirections115578
Node: Executing Commands125390
Node: Simple Command Expansion126060
Node: Command Search and Execution128174
Node: Command Execution Environment130585
Node: Environment133897
Node: Exit Status135604
Node: Signals137392
Node: Shell Scripts141009
Node: Shell Builtin Commands144104
Node: Bourne Shell Builtins146218
Node: Bash Builtins170625
Node: Modifying Shell Behavior205233
Node: The Set Builtin205578
Node: The Shopt Builtin217096
Node: Special Builtins233835
Node: Shell Variables234827
Node: Bourne Shell Variables235264
Node: Bash Variables237460
Node: Bash Features274013
Node: Invoking Bash275030
Node: Bash Startup Files281432
Node: Interactive Shells286747
Node: What is an Interactive Shell?287158
Node: Is this Shell Interactive?287827
Node: Interactive Shell Behavior288654
Node: Bash Conditional Expressions292411
Node: Shell Arithmetic297588
Node: Aliases300673
Node: Arrays303631
Node: The Directory Stack310433
Node: Directory Stack Builtins311233
Node: Controlling the Prompt315685
Node: The Restricted Shell318826
Node: Bash POSIX Mode321616
Node: Shell Compatibility Mode339100
Node: Job Control347589
Node: Job Control Basics348049
Node: Job Control Builtins353226
Node: Job Control Variables359189
Node: Command Line Editing360369
Node: Introduction and Notation362076
Node: Readline Interaction363723
Node: Readline Bare Essentials364914
Node: Readline Movement Commands366735
Node: Readline Killing Commands367735
Node: Readline Arguments369716
Node: Searching370776
Node: Readline Init File373008
Node: Readline Init File Syntax374293
Node: Conditional Init Constructs399234
Node: Sample Init File403602
Node: Bindable Readline Commands406726
Node: Commands For Moving407954
Node: Commands For History410057
Node: Commands For Text415143
Node: Commands For Killing419221
Node: Numeric Arguments422025
Node: Commands For Completion423180
Node: Keyboard Macros427499
Node: Miscellaneous Commands428203
Node: Readline vi Mode434860
Node: Programmable Completion435815
Node: Programmable Completion Builtins443775
Node: A Programmable Completion Example455344
Node: Using History Interactively460692
Node: Bash History Facilities461376
Node: Bash History Builtins464491
Node: History Interaction469737
Node: Event Designators474065
Node: Word Designators475651
Node: Modifiers477640
Node: Installing Bash479552
Node: Basic Installation480689
Node: Compilers and Options484571
Node: Compiling For Multiple Architectures485324
Node: Installation Names487076
Node: Specifying the System Type489313
Node: Sharing Defaults490062
Node: Operation Controls490779
Node: Optional Features491801
Node: Reporting Bugs503606
Node: Major Differences From The Bourne Shell504958
Node: GNU Free Documentation License522770
Node: Indexes547950
Node: Builtin Index548404
Node: Reserved Word Index555505
Node: Variable Index557953
Node: Function Index575087
Node: Concept Index588946

End Tag Table
+4
View File
@@ -2063,7 +2063,11 @@ update_line (char *old, char *old_face, char *new, char *new_face, int current_l
assume it's a combining character and back one up so the two base
characters no longer compare equivalently. */
t = MBRTOWC (&wc, ofd, mb_cur_max, &ps);
#if 0
if (t > 0 && UNICODE_COMBINING_CHAR (wc) && WCWIDTH (wc) == 0)
#else
if (t > 0 && IS_COMBINING_CHAR (wc))
#endif
{
old_offset = _rl_find_prev_mbchar (old, ofd - old, MB_FIND_ANY);
new_offset = _rl_find_prev_mbchar (new, nfd - new, MB_FIND_ANY);
+9 -2
View File
@@ -216,11 +216,13 @@ _rl_find_next_mbchar_internal (const char *string, int seed, int count, int find
if (find_non_zero)
{
tmp = MBRTOWC (&wc, string + point, strlen (string + point), &ps);
len = strlen (string + point);
tmp = MBRTOWC (&wc, string + point, len, &ps);
while (MB_NULLWCH (tmp) == 0 && MB_INVALIDCH (tmp) == 0 && WCWIDTH (wc) == 0)
{
point += tmp;
tmp = MBRTOWC (&wc, string + point, strlen (string + point), &ps);
len -= tmp;
tmp = MBRTOWC (&wc, string + point, len, &ps);
}
}
@@ -261,11 +263,16 @@ _rl_find_prev_utf8char (const char *string, int seed, int find_non_zero)
save = prev;
/* Move back until we're not in the middle of a multibyte char */
#if 0
if (UTF8_MBCHAR (b))
{
while (prev > 0 && (b = (unsigned char)string[--prev]) && UTF8_MBCHAR (b))
;
}
#else
while (prev > 0 && (b = (unsigned char)string[--prev]) && UTF8_MBFIRSTCHAR (b) == 0)
;
#endif
if (UTF8_MBFIRSTCHAR (b))
{
+10 -3
View File
@@ -172,11 +172,16 @@ _rl_wcwidth (WCHAR_T wc)
}
}
/* Unicode combining characters range from U+0300 to U+036F */
#define UNICODE_COMBINING_CHAR(x) ((x) >= 768 && (x) <= 879)
/* Unicode combining characters as of version 15.1 */
#define UNICODE_COMBINING_CHAR(x) \
(((x) >= 0x0300 && (x) <= 0x036F) || \
((x) >= 0x1AB0 && (x) <= 0x1AFF) || \
((x) >= 0x1DC0 && (x) <= 0x1DFF) || \
((x) >= 0x20D0 && (x) <= 0x20FF) || \
((x) >= 0xFE20 && (x) <= 0xFE2F))
#if defined (WCWIDTH_BROKEN)
# define WCWIDTH(wc) ((_rl_utf8locale && UNICODE_COMBINING_CHAR(wc)) ? 0 : _rl_wcwidth(wc))
# define WCWIDTH(wc) ((_rl_utf8locale && UNICODE_COMBINING_CHAR((int)wc)) ? 0 : _rl_wcwidth(wc))
#else
# define WCWIDTH(wc) _rl_wcwidth(wc)
#endif
@@ -187,6 +192,8 @@ _rl_wcwidth (WCHAR_T wc)
# define IS_COMBINING_CHAR(x) (WCWIDTH(x) == 0)
#endif
#define IS_BASE_CHAR(x) (iswgraph(x) && WCWIDTH(x) > 0)
#define UTF8_SINGLEBYTE(c) (((c) & 0x80) == 0)
#define UTF8_MBFIRSTCHAR(c) (((c) & 0xc0) == 0xc0)
#define UTF8_MBCHAR(c) (((c) & 0xc0) == 0x80)
+44 -65
View File
@@ -368,7 +368,7 @@ static WORD_LIST *glob_expand_word_list (WORD_LIST *, int);
static WORD_LIST *brace_expand_word_list (WORD_LIST *, int);
#endif
#if defined (ARRAY_VARS)
static int make_internal_declare (char *, char *, char *);
static int make_internal_declare (const char *, const char *, const char *, const char *);
static void expand_compound_assignment_word (WORD_LIST *, int);
static WORD_LIST *expand_declaration_argument (WORD_LIST *, WORD_LIST *);
#endif
@@ -12654,7 +12654,7 @@ brace_expand_word_list (WORD_LIST *tlist, int eflags)
the list of options to supply to `declare'. CMD is the declaration command
we are expanding right now; it's unused currently. */
static int
make_internal_declare (char *word, char *option, char *cmd)
make_internal_declare (const char *word, const char *opts_on, const char *opts_off, const char *cmd)
{
int t, r;
WORD_LIST *wl;
@@ -12671,7 +12671,10 @@ make_internal_declare (char *word, char *option, char *cmd)
}
wl = make_word_list (w, (WORD_LIST *)NULL);
wl = make_word_list (make_word (option), wl);
if (*opts_on)
wl = make_word_list (make_word (opts_on), wl);
if (*opts_off)
wl = make_word_list (make_word (opts_off), wl);
r = declare_builtin (wl);
@@ -12810,96 +12813,74 @@ expand_compound_assignment_word (WORD_LIST *tlist, int atype)
static WORD_LIST *
expand_declaration_argument (WORD_LIST *tlist, WORD_LIST *wcmd)
{
char opts[16], omap[128];
int t, opti, oind, skip, inheriting;
char opts_on[16], opts_off[16], omap[128];
int t, i_on, i_off, oind, skip, inheriting;
WORD_LIST *l;
inheriting = localvar_inherit;
opti = 0;
if (tlist->word->flags & (W_ASSIGNASSOC|W_ASSNGLOBAL|W_CHKLOCAL|W_ASSIGNARRAY))
opts[opti++] = '-';
memset (omap, '\0', sizeof (omap));
if ((tlist->word->flags & (W_ASSIGNASSOC|W_ASSNGLOBAL)) == (W_ASSIGNASSOC|W_ASSNGLOBAL))
{
opts[opti++] = 'g';
opts[opti++] = 'A';
}
else if (tlist->word->flags & W_ASSIGNASSOC)
{
opts[opti++] = 'A';
}
else if ((tlist->word->flags & (W_ASSIGNARRAY|W_ASSNGLOBAL)) == (W_ASSIGNARRAY|W_ASSNGLOBAL))
{
opts[opti++] = 'g';
opts[opti++] = 'a';
}
if (tlist->word->flags & W_ASSIGNASSOC)
omap['A'] = 1;
else if (tlist->word->flags & W_ASSIGNARRAY)
{
opts[opti++] = 'a';
}
else if (tlist->word->flags & W_ASSNGLOBAL)
opts[opti++] = 'g';
omap['a'] = 1;
if (tlist->word->flags & W_ASSNGLOBAL)
omap['g'] = 1;
if (tlist->word->flags & W_CHKLOCAL)
opts[opti++] = 'G';
omap['G'] = 1;
/* If we have special handling note the integer attribute and others
that transform the value upon assignment. What we do is take all
of the option arguments and scan through them looking for options
that cause such transformations, and add them to the `opts' array. */
that cause such transformations, and add them to either the `opts_on'
or `opts_off' array as appropriate. */
memset (omap, '\0', sizeof (omap));
for (l = wcmd->next; l != tlist; l = l->next)
{
int optchar;
if (l->word->word[0] != '-' && l->word->word[0] != '+')
break; /* non-option argument */
if (l->word->word[0] == '-' && l->word->word[1] == '-' && l->word->word[2] == 0)
if (l->word->word[1] == 0)
break; /* handle `local -'; let `declare +' be an error */
if (ISOPTION (l->word->word, '-'))
break; /* -- signals end of options */
optchar = l->word->word[0];
for (oind = 1; l->word->word[oind]; oind++)
switch (l->word->word[oind])
{
case 'I':
inheriting = 1;
case 'i':
case 'l':
case 'u':
case 'c':
omap[l->word->word[oind]] = 1;
if (opti == 0)
opts[opti++] = optchar;
omap[l->word->word[oind]] |= (optchar == '-' ? 1 : 2);
break;
default:
break;
}
}
i_on = i_off = 0;
for (oind = 0; oind < sizeof (omap); oind++)
if (omap[oind])
opts[opti++] = oind;
/* If there are no -a/-A options, but we have a compound assignment,
we have a choice: we can set opts[0]='-', opts[1]='a', since the
default is to create an indexed array, and call
make_internal_declare with that, or we can just skip the -a and let
declare_builtin deal with it. Once we're here, we're better set
up for the latter, since we don't want to deal with looking up
any existing variable here -- better to let declare_builtin do it.
We need the variable created, though, especially if it's local, so
we get the scoping right before we call do_word_assignment.
To ensure that make_local_declare gets called, we add `--' if there
aren't any options. */
if ((tlist->word->flags & (W_ASSIGNASSOC|W_ASSIGNARRAY)) == 0)
{
if (opti == 0)
if (omap[oind] & 1) /* on options */
{
opts[opti++] = '-';
opts[opti++] = '-';
if (i_on == 0)
opts_on[i_on++] = '-';
opts_on[i_on++] = oind;
}
if (omap[oind] & 2) /* off options */
{
if (i_off == 0)
opts_off[i_off++] = '+';
opts_off[i_off++] = oind;
}
}
opts[opti] = '\0';
opts_on[i_on] = opts_off[i_off] = '\0';
/* This isn't perfect, but it's a start. Improvements later. We expand
tlist->word->word and single-quote the results to avoid multiple
@@ -12910,17 +12891,15 @@ expand_declaration_argument (WORD_LIST *tlist, WORD_LIST *wcmd)
expand_compound_assignment_word (tlist, (tlist->word->flags & W_ASSIGNASSOC) ? 1 : 0);
skip = 0;
if (opti > 0)
/* We always call make_internal_declare */
t = make_internal_declare (tlist->word->word, opts_on, opts_off, wcmd ? wcmd->word->word : (char *)0);
if (t != EXECUTION_SUCCESS)
{
t = make_internal_declare (tlist->word->word, opts, wcmd ? wcmd->word->word : (char *)0);
if (t != EXECUTION_SUCCESS)
{
last_command_exit_value = t;
if (tlist->word->flags & W_FORCELOCAL) /* non-fatal error */
skip = 1;
else
exp_jump_to_top_level (DISCARD);
}
last_command_exit_value = t;
if (tlist->word->flags & W_FORCELOCAL) /* non-fatal error */
skip = 1;
else
exp_jump_to_top_level (DISCARD);
}
if (skip == 0)
+22 -22
View File
@@ -1,6 +1,6 @@
./array.tests: line 28: syntax error near unexpected token `&'
./array.tests: line 28: `test=(first & second)'
./array.tests: line 34: syntax error near unexpected token `&'
./array.tests: line 34: `test=(first & second)'
1
abcde
abcde
@@ -26,7 +26,7 @@ hello world
11
3
bdef hello world test expression test 2
./array.tests: line 92: readonly: `a[5]': not a valid identifier
./array.tests: line 98: readonly: `a[5]': not a valid identifier
declare -ar a=([1]="" [2]="bdef" [5]="hello world" [6]="test expression" [15]="test 2")
declare -ar c
declare -ar a=([1]="" [2]="bdef" [5]="hello world" [6]="test expression" [15]="test 2")
@@ -46,17 +46,17 @@ declare -ar c
declare -a d=([1]="" [2]="bdef" [5]="hello world" [6]="test" [9]="ninth element")
declare -a e=([0]="test")
declare -a f=([0]="" [1]="bdef" [2]="hello world" [3]="test" [4]="ninth element")
./array.tests: line 116: a: readonly variable
./array.tests: line 118: b[]: bad array subscript
./array.tests: line 119: b[*]: bad array subscript
./array.tests: line 122: a: readonly variable
./array.tests: line 124: b[]: bad array subscript
./array.tests: line 125: b[*]: bad array subscript
this
./array.tests: line 122: c[-2]: bad array subscript
./array.tests: line 123: c: bad array subscript
./array.tests: line 128: c[-2]: bad array subscript
./array.tests: line 129: c: bad array subscript
./array.tests: line 125: d[7]: cannot assign list to array member
./array.tests: line 127: []=abcde: bad array subscript
./array.tests: line 128: [*]=last: cannot assign to non-numeric index
./array.tests: line 129: [-65]=negative: bad array subscript
./array.tests: line 131: d[7]: cannot assign list to array member
./array.tests: line 133: []=abcde: bad array subscript
./array.tests: line 134: [*]=last: cannot assign to non-numeric index
./array.tests: line 135: [-65]=negative: bad array subscript
declare -a BASH_ARGC=()
declare -a BASH_ARGV=()
declare -a BASH_LINENO=([0]="0")
@@ -69,8 +69,8 @@ declare -ar c
declare -a d=([1]="test test")
declare -a e=()
declare -a f=([0]="" [1]="bdef" [2]="hello world" [3]="test" [4]="ninth element")
./array.tests: line 137: unset: ps1: not an array variable
./array.tests: line 141: declare: c: readonly variable
./array.tests: line 143: unset: ps1: not an array variable
./array.tests: line 147: declare: c: readonly variable
this of
this is a test of read using arrays
this test
@@ -123,7 +123,7 @@ argv[1] = </>
55
49
6 -- 6
./array.tests: line 232: [-10]: bad array subscript
./array.tests: line 238: [-10]: bad array subscript
0
42 14 44
grep [ 123 ] *
@@ -131,9 +131,9 @@ grep [ 123 ] *
6 7 9 5
length = 3
value = new1 new2 new3
./array.tests: line 261: syntax error near unexpected token `&'
./array.tests: line 261: `badarray=( metacharacters like & need to be quoted in compound assignments)'
./array.tests: line 265: narray: unbound variable
./array.tests: line 267: syntax error near unexpected token `&'
./array.tests: line 267: `badarray=( metacharacters like & need to be quoted in compound assignments)'
./array.tests: line 271: narray: unbound variable
./array1.sub: line 1: syntax error near unexpected token `('
./array1.sub: line 1: `printf "%s\n" -a a=(a 'b c')'
./array2.sub: line 1: declare: `[]=asdf': not a valid identifier
@@ -160,10 +160,10 @@ for case if then else
12 14 16 18 20
4414758999202
aaa bbb
./array.tests: line 315: syntax error near unexpected token `<>'
./array.tests: line 315: `metas=( <> < > ! )'
./array.tests: line 316: syntax error near unexpected token `<>'
./array.tests: line 316: `metas=( [1]=<> [2]=< [3]=> [4]=! )'
./array.tests: line 321: syntax error near unexpected token `<>'
./array.tests: line 321: `metas=( <> < > ! )'
./array.tests: line 322: syntax error near unexpected token `<>'
./array.tests: line 322: `metas=( [1]=<> [2]=< [3]=> [4]=! )'
abc 3
case 4
abc case if then else 5
+15 -9
View File
@@ -11,13 +11,19 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Filter stdin to remove builtin array variables that are
# automatically set and possibly contain values that vary.
ignore_builtin_arrays()
{
grep -v -e BASH_VERSINFO= -e PIPESTATUS= -e GROUPS=
}
# this is needed so that the bad assignments (b[]=bcde, for example) do not
# cause fatal shell errors when in posix mode
set +o posix
set +a
# The calls to egrep -v are to filter out builtin array variables that are
# automatically set and possibly contain values that vary.
# first make sure we handle the basics
x=()
@@ -61,7 +67,7 @@ echo ${a[@]}
echo ${a[*]}
# this should print out values, too
declare -a | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)'
declare -a | ignore_builtin_arrays
unset a[7]
echo ${a[*]}
@@ -92,11 +98,11 @@ echo ${a[@]}
readonly a[5]
readonly a
# these two lines should output `declare' commands
readonly -a | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)'
declare -ar | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)'
readonly -a | ignore_builtin_arrays
declare -ar | ignore_builtin_arrays
# this line should output `readonly' commands, even for arrays
set -o posix
readonly -a | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)'
readonly -a | ignore_builtin_arrays
set +o posix
declare -a d='([1]="" [2]="bdef" [5]="hello world" "test")'
@@ -111,7 +117,7 @@ b=([0]=this [1]=is [2]=a [3]=test [4]="$PS1" [5]=$pass)
echo ${b[@]:2:3}
declare -pa | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)'
declare -pa | ignore_builtin_arrays
a[3]="this is a test"
@@ -131,7 +137,7 @@ d=([1]="test test" [-65]=negative )
unset d[12]
unset e[*]
declare -a | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)'
declare -a | ignore_builtin_arrays
ps1='hello'
unset ps1[2]
@@ -157,7 +163,7 @@ echo ${vv[0]} ${vv[3]}
echo ${vv[@]}
unset vv
declare -a | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)'
declare -a | ignore_builtin_arrays
export rv
#set