diff --git a/CWRU/CWRU.chlog b/CWRU/CWRU.chlog index aec91802..ec0d9f41 100644 --- a/CWRU/CWRU.chlog +++ b/CWRU/CWRU.chlog @@ -7531,3 +7531,12 @@ execute_cmd.c resets the signal-in-progress flag if we're running a command in a subshell, since we're not running the trap command (we are the trap command) + + 3/10 + ---- +subst.c + - parameter_brace_expand: if we assign the empty string to a variable + using the [:]= expansion in a quoted expansion, make sure we note + we are returning a quoted null string to the caller by setting + W_HASQUOTEDNULL. Fixes bug reported by Martin Castillo + diff --git a/doc/bash.info b/doc/bash.info index e0c9059f..8dca3376 100644 --- a/doc/bash.info +++ b/doc/bash.info @@ -6644,216 +6644,220 @@ startup files. re-search '$PATH' to find the new location. This is also available with 'shopt -s checkhash'. - 3. The message printed by the job control code and builtins when a job - exits with a non-zero status is 'Done(status)'. + 3. Bash will not insert a command without the execute bit set into the + command hash table, even if it returns it as a (last-ditch) result + from a '$PATH' search. 4. The message printed by the job control code and builtins when a job + exits with a non-zero status is 'Done(status)'. + + 5. The message printed by the job control code and builtins when a job is stopped is 'Stopped(SIGNAME)', where SIGNAME is, for example, 'SIGTSTP'. - 5. Alias expansion is always enabled, even in non-interactive shells. + 6. Alias expansion is always enabled, even in non-interactive shells. - 6. Reserved words appearing in a context where reserved words are + 7. Reserved words appearing in a context where reserved words are recognized do not undergo alias expansion. - 7. The POSIX 'PS1' and 'PS2' expansions of '!' to the history number + 8. The POSIX 'PS1' and 'PS2' expansions of '!' to the history number and '!!' to '!' are enabled, and parameter expansion is performed on the values of 'PS1' and 'PS2' regardless of the setting of the 'promptvars' option. - 8. The POSIX startup files are executed ('$ENV') rather than the + 9. The POSIX startup files are executed ('$ENV') rather than the normal Bash files. - 9. Tilde expansion is only performed on assignments preceding a + 10. Tilde expansion is only performed on assignments preceding a command name, rather than on all assignment statements on the line. - 10. The default history file is '~/.sh_history' (this is the default + 11. The default history file is '~/.sh_history' (this is the default value of '$HISTFILE'). - 11. Redirection operators do not perform filename expansion on the + 12. Redirection operators do not perform filename expansion on the word in the redirection unless the shell is interactive. - 12. Redirection operators do not perform word splitting on the word in + 13. Redirection operators do not perform word splitting on the word in the redirection. - 13. Function names must be valid shell 'name's. That is, they may not + 14. Function names must be valid shell 'name's. That is, they may not contain characters other than letters, digits, and underscores, and may not start with a digit. Declaring a function with an invalid name causes a fatal syntax error in non-interactive shells. - 14. Function names may not be the same as one of the POSIX special + 15. Function names may not be the same as one of the POSIX special builtins. - 15. POSIX special builtins are found before shell functions during + 16. POSIX special builtins are found before shell functions during command lookup. - 16. When printing shell function definitions (e.g., by 'type'), Bash + 17. When printing shell function definitions (e.g., by 'type'), Bash does not print the 'function' keyword. - 17. Literal tildes that appear as the first character in elements of + 18. Literal tildes that appear as the first character in elements of the 'PATH' variable are not expanded as described above under *note Tilde Expansion::. - 18. The 'time' reserved word may be used by itself as a command. When + 19. The 'time' reserved word may be used by itself as a command. When used in this way, it displays timing statistics for the shell and its completed children. The 'TIMEFORMAT' variable controls the format of the timing information. - 19. When parsing and expanding a ${...} expansion that appears within + 20. When parsing and expanding a ${...} expansion that appears within double quotes, single quotes are no longer special and cannot be used to quote a closing brace or other special character, unless the operator is one of those defined to perform pattern removal. In this case, they do not have to appear as matched pairs. - 20. The parser does not recognize 'time' as a reserved word if the + 21. The parser does not recognize 'time' as a reserved word if the next token begins with a '-'. - 21. The '!' character does not introduce history expansion within a + 22. The '!' character does not introduce history expansion within a double-quoted string, even if the 'histexpand' option is enabled. - 22. If a POSIX special builtin returns an error status, a + 23. If a POSIX special builtin returns an error status, a non-interactive shell exits. The fatal errors are those listed in the POSIX standard, and include things like passing incorrect options, redirection errors, variable assignment errors for assignments preceding the command name, and so on. - 23. A non-interactive shell exits with an error status if a variable + 24. A non-interactive shell exits with an error status if a variable assignment error occurs when no command name follows the assignment statements. A variable assignment error occurs, for example, when trying to assign a value to a readonly variable. - 24. A non-interactive shell exits with an error status if a variable + 25. A non-interactive shell exits with an error status if a variable assignment error occurs in an assignment statement preceding a special builtin, but not with any other simple command. - 25. A non-interactive shell exits with an error status if the + 26. A non-interactive shell exits with an error status if the iteration variable in a 'for' statement or the selection variable in a 'select' statement is a readonly variable. - 26. Non-interactive shells exit if FILENAME in '.' FILENAME is not + 27. Non-interactive shells exit if FILENAME in '.' FILENAME is not found. - 27. Non-interactive shells exit if a syntax error in an arithmetic + 28. Non-interactive shells exit if a syntax error in an arithmetic expansion results in an invalid expression. - 28. Non-interactive shells exit if a parameter expansion error occurs. + 29. Non-interactive shells exit if a parameter expansion error occurs. - 29. Non-interactive shells exit if there is a syntax error in a script + 30. Non-interactive shells exit if there is a syntax error in a script read with the '.' or 'source' builtins, or in a string processed by the 'eval' builtin. - 30. While variable indirection is available, it may not be applied to + 31. While variable indirection is available, it may not be applied to the '#' and '?' special parameters. - 31. When expanding the '*' special parameter in a pattern context + 32. When expanding the '*' special parameter in a pattern context where the expansion is double-quoted does not treat the '$*' as if it were double-quoted. - 32. Assignment statements preceding POSIX special builtins persist in + 33. Assignment statements preceding POSIX special builtins persist in the shell environment after the builtin completes. - 33. Assignment statements preceding shell function calls persist in + 34. Assignment statements preceding shell function calls persist in the shell environment after the function returns, as if a POSIX special builtin command had been executed. - 34. The 'command' builtin does not prevent builtins that take + 35. The 'command' builtin does not prevent builtins that take assignment statements as arguments from expanding them as assignment statements; when not in POSIX mode, assignment builtins lose their assignment statement expansion properties when preceded by 'command'. - 35. The 'bg' builtin uses the required format to describe each job + 36. The 'bg' builtin uses the required format to describe each job placed in the background, which does not include an indication of whether the job is the current or previous job. - 36. The output of 'kill -l' prints all the signal names on a single + 37. The output of 'kill -l' prints all the signal names on a single line, separated by spaces, without the 'SIG' prefix. - 37. The 'kill' builtin does not accept signal names with a 'SIG' + 38. The 'kill' builtin does not accept signal names with a 'SIG' prefix. - 38. The 'export' and 'readonly' builtin commands display their output + 39. The 'export' and 'readonly' builtin commands display their output in the format required by POSIX. - 39. The 'trap' builtin displays signal names without the leading + 40. The 'trap' builtin displays signal names without the leading 'SIG'. - 40. The 'trap' builtin doesn't check the first argument for a possible + 41. The 'trap' builtin doesn't check the first argument for a possible signal specification and revert the signal handling to the original disposition if it is, unless that argument consists solely of digits and is a valid signal number. If users want to reset the handler for a given signal to the original disposition, they should use '-' as the first argument. - 41. The '.' and 'source' builtins do not search the current directory + 42. The '.' and 'source' builtins do not search the current directory for the filename argument if it is not found by searching 'PATH'. - 42. Enabling POSIX mode has the effect of setting the + 43. Enabling POSIX mode has the effect of setting the 'inherit_errexit' option, so subshells spawned to execute command substitutions inherit the value of the '-e' option from the parent shell. When the 'inherit_errexit' option is not enabled, Bash clears the '-e' option in such subshells. - 43. Enabling POSIX mode has the effect of setting the 'shift_verbose' + 44. Enabling POSIX mode has the effect of setting the 'shift_verbose' option, so numeric arguments to 'shift' that exceed the number of positional parameters will result in an error message. - 44. When the 'alias' builtin displays alias definitions, it does not + 45. When the 'alias' builtin displays alias definitions, it does not display them with a leading 'alias ' unless the '-p' option is supplied. - 45. When the 'set' builtin is invoked without options, it does not + 46. When the 'set' builtin is invoked without options, it does not display shell function names and definitions. - 46. When the 'set' builtin is invoked without options, it displays + 47. When the 'set' builtin is invoked without options, it displays variable values without quotes, unless they contain shell metacharacters, even if the result contains nonprinting characters. - 47. When the 'cd' builtin is invoked in LOGICAL mode, and the pathname + 48. When the 'cd' builtin is invoked in LOGICAL mode, and the pathname constructed from '$PWD' and the directory name supplied as an argument does not refer to an existing directory, 'cd' will fail instead of falling back to PHYSICAL mode. - 48. When the 'cd' builtin cannot change a directory because the length + 49. When the 'cd' builtin cannot change a directory because the length of the pathname constructed from '$PWD' and the directory name supplied as an argument exceeds PATH_MAX when all symbolic links are expanded, 'cd' will fail instead of attempting to use only the supplied directory name. - 49. The 'pwd' builtin verifies that the value it prints is the same as + 50. The 'pwd' builtin verifies that the value it prints is the same as the current directory, even if it is not asked to check the file system with the '-P' option. - 50. When listing the history, the 'fc' builtin does not include an + 51. When listing the history, the 'fc' builtin does not include an indication of whether or not a history entry has been modified. - 51. The default editor used by 'fc' is 'ed'. + 52. The default editor used by 'fc' is 'ed'. - 52. The 'type' and 'command' builtins will not report a non-executable + 53. The 'type' and 'command' builtins will not report a non-executable file as having been found, though the shell will attempt to execute such a file if it is the only so-named file found in '$PATH'. - 53. The 'vi' editing mode will invoke the 'vi' editor directly when + 54. The 'vi' editing mode will invoke the 'vi' editor directly when the 'v' command is run, instead of checking '$VISUAL' and '$EDITOR'. - 54. When the 'xpg_echo' option is enabled, Bash does not attempt to + 55. When the 'xpg_echo' option is enabled, Bash does not attempt to interpret any arguments to 'echo' as options. Each argument is displayed, after escape characters are converted. - 55. The 'ulimit' builtin uses a block size of 512 bytes for the '-c' + 56. The 'ulimit' builtin uses a block size of 512 bytes for the '-c' and '-f' options. - 56. The arrival of 'SIGCHLD' when a trap is set on 'SIGCHLD' does not + 57. The arrival of 'SIGCHLD' when a trap is set on 'SIGCHLD' does not interrupt the 'wait' builtin and cause it to return immediately. The trap command is run once for each child that exits. - 57. The 'read' builtin may be interrupted by a signal for which a trap + 58. The 'read' builtin may be interrupted by a signal for which a trap has been set. If Bash receives a trapped signal while executing 'read', the trap handler executes and 'read' returns an exit status greater than 128. - 58. Bash removes an exited background process's status from the list + 59. Bash removes an exited background process's status from the list of such statuses after the 'wait' builtin is used to obtain it. There is other POSIX behavior that Bash does not implement by default @@ -11853,60 +11857,60 @@ Node: Directory Stack Builtins273821 Node: Controlling the Prompt276789 Node: The Restricted Shell279710 Node: Bash POSIX Mode282192 -Node: Job Control293079 -Node: Job Control Basics293539 -Node: Job Control Builtins298503 -Node: Job Control Variables303649 -Node: Command Line Editing304805 -Node: Introduction and Notation306476 -Node: Readline Interaction308099 -Node: Readline Bare Essentials309290 -Node: Readline Movement Commands311073 -Node: Readline Killing Commands312033 -Node: Readline Arguments313951 -Node: Searching314995 -Node: Readline Init File317181 -Node: Readline Init File Syntax318440 -Node: Conditional Init Constructs338970 -Node: Sample Init File343166 -Node: Bindable Readline Commands346283 -Node: Commands For Moving347487 -Node: Commands For History349346 -Node: Commands For Text353641 -Node: Commands For Killing357029 -Node: Numeric Arguments359844 -Node: Commands For Completion360983 -Node: Keyboard Macros365174 -Node: Miscellaneous Commands365861 -Node: Readline vi Mode371814 -Node: Programmable Completion372721 -Node: Programmable Completion Builtins380501 -Node: A Programmable Completion Example391196 -Node: Using History Interactively396443 -Node: Bash History Facilities397127 -Node: Bash History Builtins400132 -Node: History Interaction404664 -Node: Event Designators408284 -Node: Word Designators409638 -Node: Modifiers411398 -Node: Installing Bash413209 -Node: Basic Installation414346 -Node: Compilers and Options417604 -Node: Compiling For Multiple Architectures418345 -Node: Installation Names420038 -Node: Specifying the System Type420856 -Node: Sharing Defaults421572 -Node: Operation Controls422245 -Node: Optional Features423203 -Node: Reporting Bugs433721 -Node: Major Differences From The Bourne Shell434915 -Node: GNU Free Documentation License451767 -Node: Indexes476944 -Node: Builtin Index477398 -Node: Reserved Word Index484225 -Node: Variable Index486673 -Node: Function Index502570 -Node: Concept Index516009 +Node: Job Control293254 +Node: Job Control Basics293714 +Node: Job Control Builtins298678 +Node: Job Control Variables303824 +Node: Command Line Editing304980 +Node: Introduction and Notation306651 +Node: Readline Interaction308274 +Node: Readline Bare Essentials309465 +Node: Readline Movement Commands311248 +Node: Readline Killing Commands312208 +Node: Readline Arguments314126 +Node: Searching315170 +Node: Readline Init File317356 +Node: Readline Init File Syntax318615 +Node: Conditional Init Constructs339145 +Node: Sample Init File343341 +Node: Bindable Readline Commands346458 +Node: Commands For Moving347662 +Node: Commands For History349521 +Node: Commands For Text353816 +Node: Commands For Killing357204 +Node: Numeric Arguments360019 +Node: Commands For Completion361158 +Node: Keyboard Macros365349 +Node: Miscellaneous Commands366036 +Node: Readline vi Mode371989 +Node: Programmable Completion372896 +Node: Programmable Completion Builtins380676 +Node: A Programmable Completion Example391371 +Node: Using History Interactively396618 +Node: Bash History Facilities397302 +Node: Bash History Builtins400307 +Node: History Interaction404839 +Node: Event Designators408459 +Node: Word Designators409813 +Node: Modifiers411573 +Node: Installing Bash413384 +Node: Basic Installation414521 +Node: Compilers and Options417779 +Node: Compiling For Multiple Architectures418520 +Node: Installation Names420213 +Node: Specifying the System Type421031 +Node: Sharing Defaults421747 +Node: Operation Controls422420 +Node: Optional Features423378 +Node: Reporting Bugs433896 +Node: Major Differences From The Bourne Shell435090 +Node: GNU Free Documentation License451942 +Node: Indexes477119 +Node: Builtin Index477573 +Node: Reserved Word Index484400 +Node: Variable Index486848 +Node: Function Index502745 +Node: Concept Index516184  End Tag Table diff --git a/doc/bashref.dvi b/doc/bashref.dvi index 676505dc..d1225dc6 100644 Binary files a/doc/bashref.dvi and b/doc/bashref.dvi differ diff --git a/doc/bashref.html b/doc/bashref.html index 4a56faf3..30a6c31b 100644 --- a/doc/bashref.html +++ b/doc/bashref.html @@ -8905,6 +8905,10 @@ startup files. $PATH to find the new location. This is also available with ‘shopt -s checkhash’. +
  • Bash will not insert a command without the execute bit set into the +command hash table, even if it returns it as a (last-ditch) result +from a $PATH search. +
  • The message printed by the job control code and builtins when a job exits with a non-zero status is ‘Done(status)’. diff --git a/doc/bashref.info b/doc/bashref.info index 0ee10d35..b9fd4f0a 100644 --- a/doc/bashref.info +++ b/doc/bashref.info @@ -6644,216 +6644,220 @@ startup files. re-search '$PATH' to find the new location. This is also available with 'shopt -s checkhash'. - 3. The message printed by the job control code and builtins when a job - exits with a non-zero status is 'Done(status)'. + 3. Bash will not insert a command without the execute bit set into the + command hash table, even if it returns it as a (last-ditch) result + from a '$PATH' search. 4. The message printed by the job control code and builtins when a job + exits with a non-zero status is 'Done(status)'. + + 5. The message printed by the job control code and builtins when a job is stopped is 'Stopped(SIGNAME)', where SIGNAME is, for example, 'SIGTSTP'. - 5. Alias expansion is always enabled, even in non-interactive shells. + 6. Alias expansion is always enabled, even in non-interactive shells. - 6. Reserved words appearing in a context where reserved words are + 7. Reserved words appearing in a context where reserved words are recognized do not undergo alias expansion. - 7. The POSIX 'PS1' and 'PS2' expansions of '!' to the history number + 8. The POSIX 'PS1' and 'PS2' expansions of '!' to the history number and '!!' to '!' are enabled, and parameter expansion is performed on the values of 'PS1' and 'PS2' regardless of the setting of the 'promptvars' option. - 8. The POSIX startup files are executed ('$ENV') rather than the + 9. The POSIX startup files are executed ('$ENV') rather than the normal Bash files. - 9. Tilde expansion is only performed on assignments preceding a + 10. Tilde expansion is only performed on assignments preceding a command name, rather than on all assignment statements on the line. - 10. The default history file is '~/.sh_history' (this is the default + 11. The default history file is '~/.sh_history' (this is the default value of '$HISTFILE'). - 11. Redirection operators do not perform filename expansion on the + 12. Redirection operators do not perform filename expansion on the word in the redirection unless the shell is interactive. - 12. Redirection operators do not perform word splitting on the word in + 13. Redirection operators do not perform word splitting on the word in the redirection. - 13. Function names must be valid shell 'name's. That is, they may not + 14. Function names must be valid shell 'name's. That is, they may not contain characters other than letters, digits, and underscores, and may not start with a digit. Declaring a function with an invalid name causes a fatal syntax error in non-interactive shells. - 14. Function names may not be the same as one of the POSIX special + 15. Function names may not be the same as one of the POSIX special builtins. - 15. POSIX special builtins are found before shell functions during + 16. POSIX special builtins are found before shell functions during command lookup. - 16. When printing shell function definitions (e.g., by 'type'), Bash + 17. When printing shell function definitions (e.g., by 'type'), Bash does not print the 'function' keyword. - 17. Literal tildes that appear as the first character in elements of + 18. Literal tildes that appear as the first character in elements of the 'PATH' variable are not expanded as described above under *note Tilde Expansion::. - 18. The 'time' reserved word may be used by itself as a command. When + 19. The 'time' reserved word may be used by itself as a command. When used in this way, it displays timing statistics for the shell and its completed children. The 'TIMEFORMAT' variable controls the format of the timing information. - 19. When parsing and expanding a ${...} expansion that appears within + 20. When parsing and expanding a ${...} expansion that appears within double quotes, single quotes are no longer special and cannot be used to quote a closing brace or other special character, unless the operator is one of those defined to perform pattern removal. In this case, they do not have to appear as matched pairs. - 20. The parser does not recognize 'time' as a reserved word if the + 21. The parser does not recognize 'time' as a reserved word if the next token begins with a '-'. - 21. The '!' character does not introduce history expansion within a + 22. The '!' character does not introduce history expansion within a double-quoted string, even if the 'histexpand' option is enabled. - 22. If a POSIX special builtin returns an error status, a + 23. If a POSIX special builtin returns an error status, a non-interactive shell exits. The fatal errors are those listed in the POSIX standard, and include things like passing incorrect options, redirection errors, variable assignment errors for assignments preceding the command name, and so on. - 23. A non-interactive shell exits with an error status if a variable + 24. A non-interactive shell exits with an error status if a variable assignment error occurs when no command name follows the assignment statements. A variable assignment error occurs, for example, when trying to assign a value to a readonly variable. - 24. A non-interactive shell exits with an error status if a variable + 25. A non-interactive shell exits with an error status if a variable assignment error occurs in an assignment statement preceding a special builtin, but not with any other simple command. - 25. A non-interactive shell exits with an error status if the + 26. A non-interactive shell exits with an error status if the iteration variable in a 'for' statement or the selection variable in a 'select' statement is a readonly variable. - 26. Non-interactive shells exit if FILENAME in '.' FILENAME is not + 27. Non-interactive shells exit if FILENAME in '.' FILENAME is not found. - 27. Non-interactive shells exit if a syntax error in an arithmetic + 28. Non-interactive shells exit if a syntax error in an arithmetic expansion results in an invalid expression. - 28. Non-interactive shells exit if a parameter expansion error occurs. + 29. Non-interactive shells exit if a parameter expansion error occurs. - 29. Non-interactive shells exit if there is a syntax error in a script + 30. Non-interactive shells exit if there is a syntax error in a script read with the '.' or 'source' builtins, or in a string processed by the 'eval' builtin. - 30. While variable indirection is available, it may not be applied to + 31. While variable indirection is available, it may not be applied to the '#' and '?' special parameters. - 31. When expanding the '*' special parameter in a pattern context + 32. When expanding the '*' special parameter in a pattern context where the expansion is double-quoted does not treat the '$*' as if it were double-quoted. - 32. Assignment statements preceding POSIX special builtins persist in + 33. Assignment statements preceding POSIX special builtins persist in the shell environment after the builtin completes. - 33. Assignment statements preceding shell function calls persist in + 34. Assignment statements preceding shell function calls persist in the shell environment after the function returns, as if a POSIX special builtin command had been executed. - 34. The 'command' builtin does not prevent builtins that take + 35. The 'command' builtin does not prevent builtins that take assignment statements as arguments from expanding them as assignment statements; when not in POSIX mode, assignment builtins lose their assignment statement expansion properties when preceded by 'command'. - 35. The 'bg' builtin uses the required format to describe each job + 36. The 'bg' builtin uses the required format to describe each job placed in the background, which does not include an indication of whether the job is the current or previous job. - 36. The output of 'kill -l' prints all the signal names on a single + 37. The output of 'kill -l' prints all the signal names on a single line, separated by spaces, without the 'SIG' prefix. - 37. The 'kill' builtin does not accept signal names with a 'SIG' + 38. The 'kill' builtin does not accept signal names with a 'SIG' prefix. - 38. The 'export' and 'readonly' builtin commands display their output + 39. The 'export' and 'readonly' builtin commands display their output in the format required by POSIX. - 39. The 'trap' builtin displays signal names without the leading + 40. The 'trap' builtin displays signal names without the leading 'SIG'. - 40. The 'trap' builtin doesn't check the first argument for a possible + 41. The 'trap' builtin doesn't check the first argument for a possible signal specification and revert the signal handling to the original disposition if it is, unless that argument consists solely of digits and is a valid signal number. If users want to reset the handler for a given signal to the original disposition, they should use '-' as the first argument. - 41. The '.' and 'source' builtins do not search the current directory + 42. The '.' and 'source' builtins do not search the current directory for the filename argument if it is not found by searching 'PATH'. - 42. Enabling POSIX mode has the effect of setting the + 43. Enabling POSIX mode has the effect of setting the 'inherit_errexit' option, so subshells spawned to execute command substitutions inherit the value of the '-e' option from the parent shell. When the 'inherit_errexit' option is not enabled, Bash clears the '-e' option in such subshells. - 43. Enabling POSIX mode has the effect of setting the 'shift_verbose' + 44. Enabling POSIX mode has the effect of setting the 'shift_verbose' option, so numeric arguments to 'shift' that exceed the number of positional parameters will result in an error message. - 44. When the 'alias' builtin displays alias definitions, it does not + 45. When the 'alias' builtin displays alias definitions, it does not display them with a leading 'alias ' unless the '-p' option is supplied. - 45. When the 'set' builtin is invoked without options, it does not + 46. When the 'set' builtin is invoked without options, it does not display shell function names and definitions. - 46. When the 'set' builtin is invoked without options, it displays + 47. When the 'set' builtin is invoked without options, it displays variable values without quotes, unless they contain shell metacharacters, even if the result contains nonprinting characters. - 47. When the 'cd' builtin is invoked in LOGICAL mode, and the pathname + 48. When the 'cd' builtin is invoked in LOGICAL mode, and the pathname constructed from '$PWD' and the directory name supplied as an argument does not refer to an existing directory, 'cd' will fail instead of falling back to PHYSICAL mode. - 48. When the 'cd' builtin cannot change a directory because the length + 49. When the 'cd' builtin cannot change a directory because the length of the pathname constructed from '$PWD' and the directory name supplied as an argument exceeds PATH_MAX when all symbolic links are expanded, 'cd' will fail instead of attempting to use only the supplied directory name. - 49. The 'pwd' builtin verifies that the value it prints is the same as + 50. The 'pwd' builtin verifies that the value it prints is the same as the current directory, even if it is not asked to check the file system with the '-P' option. - 50. When listing the history, the 'fc' builtin does not include an + 51. When listing the history, the 'fc' builtin does not include an indication of whether or not a history entry has been modified. - 51. The default editor used by 'fc' is 'ed'. + 52. The default editor used by 'fc' is 'ed'. - 52. The 'type' and 'command' builtins will not report a non-executable + 53. The 'type' and 'command' builtins will not report a non-executable file as having been found, though the shell will attempt to execute such a file if it is the only so-named file found in '$PATH'. - 53. The 'vi' editing mode will invoke the 'vi' editor directly when + 54. The 'vi' editing mode will invoke the 'vi' editor directly when the 'v' command is run, instead of checking '$VISUAL' and '$EDITOR'. - 54. When the 'xpg_echo' option is enabled, Bash does not attempt to + 55. When the 'xpg_echo' option is enabled, Bash does not attempt to interpret any arguments to 'echo' as options. Each argument is displayed, after escape characters are converted. - 55. The 'ulimit' builtin uses a block size of 512 bytes for the '-c' + 56. The 'ulimit' builtin uses a block size of 512 bytes for the '-c' and '-f' options. - 56. The arrival of 'SIGCHLD' when a trap is set on 'SIGCHLD' does not + 57. The arrival of 'SIGCHLD' when a trap is set on 'SIGCHLD' does not interrupt the 'wait' builtin and cause it to return immediately. The trap command is run once for each child that exits. - 57. The 'read' builtin may be interrupted by a signal for which a trap + 58. The 'read' builtin may be interrupted by a signal for which a trap has been set. If Bash receives a trapped signal while executing 'read', the trap handler executes and 'read' returns an exit status greater than 128. - 58. Bash removes an exited background process's status from the list + 59. Bash removes an exited background process's status from the list of such statuses after the 'wait' builtin is used to obtain it. There is other POSIX behavior that Bash does not implement by default @@ -11853,60 +11857,60 @@ Node: Directory Stack Builtins273821 Node: Controlling the Prompt276789 Node: The Restricted Shell279710 Node: Bash POSIX Mode282192 -Node: Job Control293079 -Node: Job Control Basics293539 -Node: Job Control Builtins298503 -Node: Job Control Variables303649 -Node: Command Line Editing304805 -Node: Introduction and Notation306476 -Node: Readline Interaction308099 -Node: Readline Bare Essentials309290 -Node: Readline Movement Commands311073 -Node: Readline Killing Commands312033 -Node: Readline Arguments313951 -Node: Searching314995 -Node: Readline Init File317181 -Node: Readline Init File Syntax318440 -Node: Conditional Init Constructs338970 -Node: Sample Init File343166 -Node: Bindable Readline Commands346283 -Node: Commands For Moving347487 -Node: Commands For History349346 -Node: Commands For Text353641 -Node: Commands For Killing357029 -Node: Numeric Arguments359844 -Node: Commands For Completion360983 -Node: Keyboard Macros365174 -Node: Miscellaneous Commands365861 -Node: Readline vi Mode371814 -Node: Programmable Completion372721 -Node: Programmable Completion Builtins380501 -Node: A Programmable Completion Example391196 -Node: Using History Interactively396443 -Node: Bash History Facilities397127 -Node: Bash History Builtins400132 -Node: History Interaction404664 -Node: Event Designators408284 -Node: Word Designators409638 -Node: Modifiers411398 -Node: Installing Bash413209 -Node: Basic Installation414346 -Node: Compilers and Options417604 -Node: Compiling For Multiple Architectures418345 -Node: Installation Names420038 -Node: Specifying the System Type420856 -Node: Sharing Defaults421572 -Node: Operation Controls422245 -Node: Optional Features423203 -Node: Reporting Bugs433721 -Node: Major Differences From The Bourne Shell434915 -Node: GNU Free Documentation License451767 -Node: Indexes476944 -Node: Builtin Index477398 -Node: Reserved Word Index484225 -Node: Variable Index486673 -Node: Function Index502570 -Node: Concept Index516009 +Node: Job Control293254 +Node: Job Control Basics293714 +Node: Job Control Builtins298678 +Node: Job Control Variables303824 +Node: Command Line Editing304980 +Node: Introduction and Notation306651 +Node: Readline Interaction308274 +Node: Readline Bare Essentials309465 +Node: Readline Movement Commands311248 +Node: Readline Killing Commands312208 +Node: Readline Arguments314126 +Node: Searching315170 +Node: Readline Init File317356 +Node: Readline Init File Syntax318615 +Node: Conditional Init Constructs339145 +Node: Sample Init File343341 +Node: Bindable Readline Commands346458 +Node: Commands For Moving347662 +Node: Commands For History349521 +Node: Commands For Text353816 +Node: Commands For Killing357204 +Node: Numeric Arguments360019 +Node: Commands For Completion361158 +Node: Keyboard Macros365349 +Node: Miscellaneous Commands366036 +Node: Readline vi Mode371989 +Node: Programmable Completion372896 +Node: Programmable Completion Builtins380676 +Node: A Programmable Completion Example391371 +Node: Using History Interactively396618 +Node: Bash History Facilities397302 +Node: Bash History Builtins400307 +Node: History Interaction404839 +Node: Event Designators408459 +Node: Word Designators409813 +Node: Modifiers411573 +Node: Installing Bash413384 +Node: Basic Installation414521 +Node: Compilers and Options417779 +Node: Compiling For Multiple Architectures418520 +Node: Installation Names420213 +Node: Specifying the System Type421031 +Node: Sharing Defaults421747 +Node: Operation Controls422420 +Node: Optional Features423378 +Node: Reporting Bugs433896 +Node: Major Differences From The Bourne Shell435090 +Node: GNU Free Documentation License451942 +Node: Indexes477119 +Node: Builtin Index477573 +Node: Reserved Word Index484400 +Node: Variable Index486848 +Node: Function Index502745 +Node: Concept Index516184  End Tag Table diff --git a/doc/bashref.log b/doc/bashref.log index c027e673..6ee04a6b 100644 --- a/doc/bashref.log +++ b/doc/bashref.log @@ -1,4 +1,4 @@ -This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/MacPorts 2019.50896_1) (preloaded format=pdfetex 2019.11.6) 29 JAN 2020 14:04 +This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/MacPorts 2019.50896_2) (preloaded format=etex 2019.11.6) 11 MAR 2020 16:16 entering extended mode restricted \write18 enabled. file:line:error style messages enabled. @@ -161,10 +161,8 @@ This is `epsf.tex' v2.7.4 <14 February 2011> texinfo.tex: doing @include of version.texi -(/Users/chet/src/bash/src/doc/version.texi) [1{/opt/local/var/db/texmf/fonts/ma -p/pdftex/updmap/pdftex.map}] [2] (/Users/chet/src/bash/src/doc/bashref.toc -[-1] [-2] [-3]) [-4] (/Users/chet/src/bash/src/doc/bashref.toc) -(/Users/chet/src/bash/src/doc/bashref.toc) Chapter 1 +(/Users/chet/src/bash/src/doc/version.texi) [1] [2] +(/Users/chet/src/bash/src/doc/bashref.toc [-1] [-2] [-3]) [-4] Chapter 1 \openout0 = `bashref.toc'. @@ -271,34 +269,12 @@ texinfo.tex: doing @include of fdl.texi [167] [168] [169] [170] [171]) Appendix D [172] [173] [174] [175] [176] [177] [178] [179] [180] [181] ) Here is how much of TeX's memory you used: - 4069 strings out of 497098 - 47090 string characters out of 6206772 - 137494 words of memory out of 5000000 - 4848 multiletter control sequences out of 15000+600000 + 3518 strings out of 497108 + 39930 string characters out of 6207178 + 86574 words of memory out of 5000000 + 4683 multiletter control sequences out of 15000+600000 34315 words of font info for 116 fonts, out of 8000000 for 9000 51 hyphenation exceptions out of 8191 - 16i,6n,16p,339b,968s stack positions out of 5000i,500n,10000p,200000b,80000s -{/opt/local/share/texmf-texlive/fonts/enc/dvips/ -cm-super/cm-super-t1.enc} - -Output written on bashref.pdf (187 pages, 759734 bytes). -PDF statistics: - 2646 PDF objects out of 2984 (max. 8388607) - 2413 compressed objects within 25 object streams - 313 named destinations out of 1000 (max. 500000) - 1125 words of extra memory for PDF output out of 10000 (max. 10000000) + 16i,6n,16p,339b,936s stack positions out of 5000i,500n,10000p,200000b,80000s +Output written on bashref.dvi (187 pages, 775840 bytes). diff --git a/doc/bashref.ps b/doc/bashref.ps index 5e68bc96..297865dd 100644 --- a/doc/bashref.ps +++ b/doc/bashref.ps @@ -1,7 +1,7 @@ %!PS-Adobe-2.0 %%Creator: dvips(k) 5.999 Copyright 2019 Radical Eye Software %%Title: bashref.dvi -%%CreationDate: Wed Jan 29 19:04:22 2020 +%%CreationDate: Wed Mar 11 20:16:46 2020 %%Pages: 187 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 @@ -12,7 +12,7 @@ %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -D 600 -t letter -o bashref.ps bashref.dvi %DVIPSParameters: dpi=600 -%DVIPSSource: TeX output 2020.01.29:1404 +%DVIPSSource: TeX output 2020.03.11:1616 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S @@ -15428,78 +15428,82 @@ Ft(shopt)f(-s)h(checkhash)p Fu('.)p eop end %%Page: 101 107 TeXDict begin 101 106 bop 150 -116 a Fu(Chapter)30 b(6:)41 b(Bash)30 b(F)-8 b(eatures)2439 b(101)199 299 y(3.)61 -b(The)42 b(message)h(prin)m(ted)e(b)m(y)h(the)g(job)g(con)m(trol)i(co)s -(de)e(and)f(builtins)h(when)f(a)h(job)g(exits)h(with)f(a)330 -408 y(non-zero)31 b(status)g(is)f(`Done\(status\)'.)199 -553 y(4.)61 b(The)40 b(message)h(prin)m(ted)f(b)m(y)g(the)h(job)f(con)m +b(Bash)36 b(will)g(not)g(insert)g(a)g(command)f(without)h(the)g +(execute)h(bit)f(set)g(in)m(to)h(the)f(command)g(hash)330 +408 y(table,)c(ev)m(en)f(if)f(it)h(returns)e(it)i(as)g(a)f(\(last-ditc) +m(h\))j(result)d(from)g(a)h Ft($PATH)e Fu(searc)m(h.)199 +540 y(4.)61 b(The)42 b(message)h(prin)m(ted)e(b)m(y)h(the)g(job)g(con)m +(trol)i(co)s(de)e(and)f(builtins)h(when)f(a)h(job)g(exits)h(with)f(a) +330 650 y(non-zero)31 b(status)g(is)f(`Done\(status\)'.)199 +781 y(5.)61 b(The)40 b(message)h(prin)m(ted)f(b)m(y)g(the)h(job)f(con)m (trol)h(co)s(de)g(and)f(builtins)f(when)h(a)g(job)g(is)h(stopp)s(ed)e -(is)330 662 y(`Stopp)s(ed\()p Fr(signame)5 b Fu(\)',)31 +(is)330 891 y(`Stopp)s(ed\()p Fr(signame)5 b Fu(\)',)31 b(where)f Fr(signame)36 b Fu(is,)31 b(for)f(example,)h -Ft(SIGTSTP)p Fu(.)199 806 y(5.)61 b(Alias)31 b(expansion)g(is)f(alw)m +Ft(SIGTSTP)p Fu(.)199 1022 y(6.)61 b(Alias)31 b(expansion)g(is)f(alw)m (a)m(ys)i(enabled,)e(ev)m(en)i(in)e(non-in)m(teractiv)m(e)j(shells.)199 -951 y(6.)61 b(Reserv)m(ed)40 b(w)m(ords)g(app)s(earing)f(in)h(a)g(con)m -(text)i(where)d(reserv)m(ed)h(w)m(ords)f(are)i(recognized)g(do)f(not) -330 1060 y(undergo)30 b(alias)h(expansion.)199 1204 y(7.)61 +1154 y(7.)61 b(Reserv)m(ed)40 b(w)m(ords)g(app)s(earing)f(in)h(a)g(con) +m(text)i(where)d(reserv)m(ed)h(w)m(ords)f(are)i(recognized)g(do)f(not) +330 1263 y(undergo)30 b(alias)h(expansion.)199 1395 y(8.)61 b(The)38 b Fm(posix)h Ft(PS1)f Fu(and)g Ft(PS2)g Fu(expansions)g(of)i (`)p Ft(!)p Fu(')f(to)g(the)g(history)g(n)m(um)m(b)s(er)f(and)g(`)p -Ft(!!)p Fu(')h(to)g(`)p Ft(!)p Fu(')h(are)330 1314 y(enabled,)26 +Ft(!!)p Fu(')h(to)g(`)p Ft(!)p Fu(')h(are)330 1504 y(enabled,)26 b(and)f(parameter)g(expansion)g(is)g(p)s(erformed)e(on)i(the)g(v)-5 b(alues)25 b(of)g Ft(PS1)f Fu(and)h Ft(PS2)f Fu(regardless)330 -1424 y(of)31 b(the)f(setting)i(of)e(the)h Ft(promptvars)c -Fu(option.)199 1568 y(8.)61 b(The)30 b Fm(posix)g Fu(startup)f(\014les) +1614 y(of)31 b(the)f(setting)i(of)e(the)h Ft(promptvars)c +Fu(option.)199 1745 y(9.)61 b(The)30 b Fm(posix)g Fu(startup)f(\014les) i(are)g(executed)g(\()p Ft($ENV)p Fu(\))f(rather)g(than)g(the)h(normal) -f(Bash)g(\014les.)199 1712 y(9.)61 b(Tilde)30 b(expansion)g(is)f(only)h -(p)s(erformed)f(on)h(assignmen)m(ts)g(preceding)g(a)g(command)g(name,)g -(rather)330 1822 y(than)g(on)g(all)i(assignmen)m(t)f(statemen)m(ts)h -(on)e(the)h(line.)154 1966 y(10.)61 b(The)30 b(default)g(history)h +f(Bash)g(\014les.)154 1877 y(10.)61 b(Tilde)30 b(expansion)g(is)f(only) +h(p)s(erformed)f(on)h(assignmen)m(ts)g(preceding)g(a)g(command)g(name,) +g(rather)330 1987 y(than)g(on)g(all)i(assignmen)m(t)f(statemen)m(ts)h +(on)e(the)h(line.)154 2118 y(11.)61 b(The)30 b(default)g(history)h (\014le)f(is)h Ft(~/.sh_history)26 b Fu(\(this)31 b(is)f(the)h(default) -g(v)-5 b(alue)30 b(of)h Ft($HISTFILE)p Fu(\).)154 2110 -y(11.)61 b(Redirection)25 b(op)s(erators)f(do)g(not)g(p)s(erform)f +g(v)-5 b(alue)30 b(of)h Ft($HISTFILE)p Fu(\).)154 2250 +y(12.)61 b(Redirection)25 b(op)s(erators)f(do)g(not)g(p)s(erform)f (\014lename)h(expansion)g(on)g(the)g(w)m(ord)f(in)h(the)g(redirection) -330 2220 y(unless)30 b(the)g(shell)h(is)f(in)m(teractiv)m(e.)154 -2364 y(12.)61 b(Redirection)31 b(op)s(erators)g(do)f(not)h(p)s(erform)e +330 2359 y(unless)30 b(the)g(shell)h(is)f(in)m(teractiv)m(e.)154 +2491 y(13.)61 b(Redirection)31 b(op)s(erators)g(do)f(not)h(p)s(erform)e (w)m(ord)h(splitting)h(on)f(the)h(w)m(ord)f(in)g(the)g(redirection.)154 -2508 y(13.)61 b(F)-8 b(unction)35 b(names)g(m)m(ust)f(b)s(e)g(v)-5 +2622 y(14.)61 b(F)-8 b(unction)35 b(names)g(m)m(ust)f(b)s(e)g(v)-5 b(alid)35 b(shell)f Ft(name)p Fu(s.)52 b(That)34 b(is,)i(they)f(ma)m(y) -g(not)g(con)m(tain)g(c)m(haracters)330 2618 y(other)e(than)g(letters,)h +g(not)g(con)m(tain)g(c)m(haracters)330 2732 y(other)e(than)g(letters,)h (digits,)h(and)d(underscores,)h(and)f(ma)m(y)h(not)g(start)h(with)e(a)h -(digit.)49 b(Declaring)330 2727 y(a)31 b(function)f(with)g(an)g(in)m(v) +(digit.)49 b(Declaring)330 2841 y(a)31 b(function)f(with)g(an)g(in)m(v) -5 b(alid)31 b(name)g(causes)f(a)h(fatal)h(syn)m(tax)f(error)f(in)g -(non-in)m(teractiv)m(e)j(shells.)154 2871 y(14.)61 b(F)-8 +(non-in)m(teractiv)m(e)j(shells.)154 2973 y(15.)61 b(F)-8 b(unction)31 b(names)f(ma)m(y)h(not)g(b)s(e)f(the)g(same)h(as)g(one)f (of)h(the)f Fm(posix)g Fu(sp)s(ecial)h(builtins.)154 -3016 y(15.)61 b Fm(posix)30 b Fu(sp)s(ecial)h(builtins)e(are)i(found)e +3104 y(16.)61 b Fm(posix)30 b Fu(sp)s(ecial)h(builtins)e(are)i(found)e (b)s(efore)h(shell)h(functions)f(during)f(command)h(lo)s(okup.)154 -3160 y(16.)61 b(When)48 b(prin)m(ting)g(shell)h(function)f +3236 y(17.)61 b(When)48 b(prin)m(ting)g(shell)h(function)f (de\014nitions)g(\(e.g.,)55 b(b)m(y)48 b Ft(type)p Fu(\),)k(Bash)d(do)s -(es)f(not)h(prin)m(t)f(the)330 3269 y Ft(function)28 -b Fu(k)m(eyw)m(ord.)154 3414 y(17.)61 b(Literal)28 b(tildes)g(that)f +(es)f(not)h(prin)m(t)f(the)330 3345 y Ft(function)28 +b Fu(k)m(eyw)m(ord.)154 3477 y(18.)61 b(Literal)28 b(tildes)g(that)f (app)s(ear)f(as)i(the)f(\014rst)f(c)m(haracter)j(in)d(elemen)m(ts)j(of) e(the)g Ft(PATH)f Fu(v)-5 b(ariable)27 b(are)h(not)330 -3523 y(expanded)i(as)g(describ)s(ed)f(ab)s(o)m(v)m(e)j(under)d(Section) -i(3.5.2)h([Tilde)f(Expansion],)f(page)h(24.)154 3667 -y(18.)61 b(The)29 b Ft(time)g Fu(reserv)m(ed)h(w)m(ord)g(ma)m(y)g(b)s +3587 y(expanded)i(as)g(describ)s(ed)f(ab)s(o)m(v)m(e)j(under)d(Section) +i(3.5.2)h([Tilde)f(Expansion],)f(page)h(24.)154 3718 +y(19.)61 b(The)29 b Ft(time)g Fu(reserv)m(ed)h(w)m(ord)g(ma)m(y)g(b)s (e)g(used)f(b)m(y)h(itself)g(as)g(a)h(command.)40 b(When)30 -b(used)f(in)g(this)h(w)m(a)m(y)-8 b(,)330 3777 y(it)33 +b(used)f(in)g(this)h(w)m(a)m(y)-8 b(,)330 3828 y(it)33 b(displa)m(ys)g(timing)g(statistics)h(for)e(the)h(shell)g(and)f(its)g (completed)i(c)m(hildren.)47 b(The)32 b Ft(TIMEFORMAT)330 -3886 y Fu(v)-5 b(ariable)31 b(con)m(trols)h(the)e(format)h(of)g(the)f -(timing)h(information.)154 4031 y(19.)61 b(When)33 b(parsing)g(and)f +3937 y Fu(v)-5 b(ariable)31 b(con)m(trols)h(the)e(format)h(of)g(the)f +(timing)h(information.)154 4069 y(20.)61 b(When)33 b(parsing)g(and)f (expanding)h(a)h($)p Fi({)6 b Fu(.)22 b(.)h(.)11 b Fi(})33 b Fu(expansion)g(that)h(app)s(ears)f(within)f(double)h(quotes,)330 -4140 y(single)42 b(quotes)g(are)g(no)g(longer)g(sp)s(ecial)g(and)f +4178 y(single)42 b(quotes)g(are)g(no)g(longer)g(sp)s(ecial)g(and)f (cannot)i(b)s(e)e(used)g(to)h(quote)g(a)g(closing)h(brace)f(or)330 -4250 y(other)31 b(sp)s(ecial)h(c)m(haracter,)i(unless)c(the)i(op)s +4288 y(other)31 b(sp)s(ecial)h(c)m(haracter,)i(unless)c(the)i(op)s (erator)f(is)g(one)h(of)f(those)h(de\014ned)e(to)i(p)s(erform)e -(pattern)330 4359 y(remo)m(v)-5 b(al.)42 b(In)30 b(this)g(case,)i(they) +(pattern)330 4398 y(remo)m(v)-5 b(al.)42 b(In)30 b(this)g(case,)i(they) e(do)g(not)h(ha)m(v)m(e)h(to)f(app)s(ear)e(as)i(matc)m(hed)g(pairs.)154 -4504 y(20.)61 b(The)29 b(parser)g(do)s(es)g(not)h(recognize)h +4529 y(21.)61 b(The)29 b(parser)g(do)s(es)g(not)h(recognize)h Ft(time)d Fu(as)i(a)g(reserv)m(ed)f(w)m(ord)g(if)h(the)f(next)h(tok)m -(en)h(b)s(egins)d(with)i(a)330 4613 y(`)p Ft(-)p Fu('.)154 -4757 y(21.)61 b(The)30 b(`)p Ft(!)p Fu(')h(c)m(haracter)h(do)s(es)e +(en)h(b)s(egins)d(with)i(a)330 4639 y(`)p Ft(-)p Fu('.)154 +4770 y(22.)61 b(The)30 b(`)p Ft(!)p Fu(')h(c)m(haracter)h(do)s(es)e (not)h(in)m(tro)s(duce)g(history)f(expansion)h(within)f(a)h -(double-quoted)g(string,)330 4867 y(ev)m(en)g(if)f(the)h -Ft(histexpand)d Fu(option)i(is)h(enabled.)154 5011 y(22.)61 +(double-quoted)g(string,)330 4880 y(ev)m(en)g(if)f(the)h +Ft(histexpand)d Fu(option)i(is)h(enabled.)154 5011 y(23.)61 b(If)24 b(a)g Fm(posix)g Fu(sp)s(ecial)h(builtin)f(returns)f(an)h (error)g(status,)i(a)e(non-in)m(teractiv)m(e)j(shell)e(exits.)39 b(The)24 b(fatal)330 5121 y(errors)30 b(are)h(those)f(listed)h(in)f @@ -15510,73 +15514,73 @@ b(The)24 b(fatal)330 5121 y(errors)30 b(are)h(those)f(listed)h(in)f eop end %%Page: 102 108 TeXDict begin 102 107 bop 150 -116 a Fu(Chapter)30 b(6:)41 -b(Bash)30 b(F)-8 b(eatures)2439 b(102)154 299 y(23.)61 +b(Bash)30 b(F)-8 b(eatures)2439 b(102)154 299 y(24.)61 b(A)31 b(non-in)m(teractiv)m(e)j(shell)d(exits)h(with)e(an)h(error)g (status)g(if)g(a)g(v)-5 b(ariable)32 b(assignmen)m(t)g(error)e(o)s (ccurs)330 408 y(when)38 b(no)h(command)g(name)g(follo)m(ws)i(the)e (assignmen)m(t)h(statemen)m(ts.)69 b(A)39 b(v)-5 b(ariable)40 b(assignmen)m(t)330 518 y(error)30 b(o)s(ccurs,)g(for)g(example,)i (when)d(trying)i(to)g(assign)f(a)h(v)-5 b(alue)31 b(to)g(a)g(readonly)f -(v)-5 b(ariable.)154 656 y(24.)61 b(A)31 b(non-in)m(teractiv)m(e)j +(v)-5 b(ariable.)154 656 y(25.)61 b(A)31 b(non-in)m(teractiv)m(e)j (shell)d(exits)h(with)e(an)h(error)g(status)g(if)g(a)g(v)-5 b(ariable)32 b(assignmen)m(t)g(error)e(o)s(ccurs)330 766 y(in)g(an)g(assignmen)m(t)i(statemen)m(t)g(preceding)e(a)h(sp)s (ecial)g(builtin,)f(but)g(not)g(with)h(an)m(y)f(other)h(simple)330 -876 y(command.)154 1014 y(25.)61 b(A)43 b(non-in)m(teractiv)m(e)i +876 y(command.)154 1014 y(26.)61 b(A)43 b(non-in)m(teractiv)m(e)i (shell)e(exits)h(with)f(an)f(error)h(status)g(if)g(the)g(iteration)h(v) -5 b(ariable)44 b(in)f(a)g Ft(for)330 1124 y Fu(statemen)m(t)32 b(or)f(the)f(selection)i(v)-5 b(ariable)32 b(in)e(a)g Ft(select)f Fu(statemen)m(t)j(is)f(a)f(readonly)h(v)-5 -b(ariable.)154 1262 y(26.)61 b(Non-in)m(teractiv)m(e)34 +b(ariable.)154 1262 y(27.)61 b(Non-in)m(teractiv)m(e)34 b(shells)c(exit)h(if)g Fr(\014lename)k Fu(in)30 b Ft(.)g -Fr(\014lename)36 b Fu(is)31 b(not)f(found.)154 1401 y(27.)61 +Fr(\014lename)36 b Fu(is)31 b(not)f(found.)154 1401 y(28.)61 b(Non-in)m(teractiv)m(e)41 b(shells)d(exit)h(if)f(a)g(syn)m(tax)g (error)g(in)f(an)h(arithmetic)h(expansion)f(results)f(in)h(an)330 -1510 y(in)m(v)-5 b(alid)31 b(expression.)154 1649 y(28.)61 +1510 y(in)m(v)-5 b(alid)31 b(expression.)154 1649 y(29.)61 b(Non-in)m(teractiv)m(e)34 b(shells)c(exit)h(if)g(a)f(parameter)h -(expansion)g(error)f(o)s(ccurs.)154 1787 y(29.)61 b(Non-in)m(teractiv)m +(expansion)g(error)f(o)s(ccurs.)154 1787 y(30.)61 b(Non-in)m(teractiv)m (e)27 b(shells)c(exit)i(if)e(there)h(is)f(a)h(syn)m(tax)g(error)f(in)g (a)h(script)f(read)g(with)h(the)f Ft(.)g Fu(or)h Ft(source)330 1897 y Fu(builtins,)30 b(or)g(in)g(a)h(string)g(pro)s(cessed)e(b)m(y)i -(the)f Ft(eval)f Fu(builtin.)154 2035 y(30.)61 b(While)32 +(the)f Ft(eval)f Fu(builtin.)154 2035 y(31.)61 b(While)32 b(v)-5 b(ariable)32 b(indirection)f(is)g(a)m(v)-5 b(ailable,)34 b(it)d(ma)m(y)h(not)f(b)s(e)g(applied)g(to)g(the)h(`)p Ft(#)p Fu(')f(and)f(`)p Ft(?)p Fu(')h(sp)s(ecial)330 -2145 y(parameters.)154 2283 y(31.)61 b(When)28 b(expanding)g(the)g(`)p +2145 y(parameters.)154 2283 y(32.)61 b(When)28 b(expanding)g(the)g(`)p Ft(*)p Fu(')g(sp)s(ecial)h(parameter)f(in)g(a)h(pattern)f(con)m(text)i (where)e(the)g(expansion)g(is)330 2393 y(double-quoted)i(do)s(es)g(not) h(treat)h(the)e Ft($*)g Fu(as)h(if)f(it)h(w)m(ere)g(double-quoted.)154 -2531 y(32.)61 b(Assignmen)m(t)23 b(statemen)m(ts)h(preceding)e +2531 y(33.)61 b(Assignmen)m(t)23 b(statemen)m(ts)h(preceding)e Fm(posix)f Fu(sp)s(ecial)i(builtins)f(p)s(ersist)g(in)f(the)i(shell)f (en)m(vironmen)m(t)330 2641 y(after)31 b(the)f(builtin)g(completes.)154 -2779 y(33.)61 b(Assignmen)m(t)35 b(statemen)m(ts)h(preceding)f(shell)f +2779 y(34.)61 b(Assignmen)m(t)35 b(statemen)m(ts)h(preceding)f(shell)f (function)g(calls)i(p)s(ersist)e(in)g(the)h(shell)f(en)m(vironmen)m(t) 330 2889 y(after)d(the)f(function)h(returns,)e(as)i(if)f(a)h Fm(posix)e Fu(sp)s(ecial)i(builtin)f(command)g(had)g(b)s(een)g -(executed.)154 3027 y(34.)61 b(The)31 b Ft(command)e +(executed.)154 3027 y(35.)61 b(The)31 b Ft(command)e Fu(builtin)i(do)s(es)g(not)h(prev)m(en)m(t)f(builtins)g(that)h(tak)m(e) h(assignmen)m(t)f(statemen)m(ts)h(as)f(ar-)330 3137 y(gumen)m(ts)40 b(from)e(expanding)h(them)g(as)h(assignmen)m(t)g(statemen)m(ts;)46 b(when)38 b(not)i(in)f Fm(posix)f Fu(mo)s(de,)330 3246 y(assignmen)m(t)k(builtins)e(lose)h(their)g(assignmen)m(t)h(statemen)m (t)h(expansion)d(prop)s(erties)g(when)g(pre-)330 3356 -y(ceded)31 b(b)m(y)f Ft(command)p Fu(.)154 3494 y(35.)61 +y(ceded)31 b(b)m(y)f Ft(command)p Fu(.)154 3494 y(36.)61 b(The)27 b Ft(bg)g Fu(builtin)g(uses)g(the)h(required)f(format)h(to)g (describ)s(e)f(eac)m(h)i(job)e(placed)h(in)f(the)h(bac)m(kground,)330 3604 y(whic)m(h)h(do)s(es)g(not)g(include)g(an)g(indication)h(of)f (whether)f(the)h(job)g(is)g(the)h(curren)m(t)e(or)h(previous)g(job.)154 -3742 y(36.)61 b(The)23 b(output)f(of)i(`)p Ft(kill)29 +3742 y(37.)61 b(The)23 b(output)f(of)i(`)p Ft(kill)29 b(-l)p Fu(')23 b(prin)m(ts)f(all)i(the)g(signal)f(names)g(on)g(a)h (single)g(line,)h(separated)e(b)m(y)g(spaces,)330 3852 y(without)30 b(the)h(`)p Ft(SIG)p Fu(')f(pre\014x.)154 -3990 y(37.)61 b(The)30 b Ft(kill)f Fu(builtin)h(do)s(es)g(not)h(accept) +3990 y(38.)61 b(The)30 b Ft(kill)f Fu(builtin)h(do)s(es)g(not)h(accept) h(signal)f(names)f(with)g(a)h(`)p Ft(SIG)p Fu(')f(pre\014x.)154 -4129 y(38.)61 b(The)38 b Ft(export)f Fu(and)g Ft(readonly)f +4129 y(39.)61 b(The)38 b Ft(export)f Fu(and)g Ft(readonly)f Fu(builtin)i(commands)g(displa)m(y)h(their)f(output)g(in)g(the)h (format)g(re-)330 4238 y(quired)30 b(b)m(y)g Fm(posix)p -Fu(.)154 4377 y(39.)61 b(The)30 b Ft(trap)f Fu(builtin)h(displa)m(ys)g +Fu(.)154 4377 y(40.)61 b(The)30 b Ft(trap)f Fu(builtin)h(displa)m(ys)g (signal)i(names)e(without)g(the)h(leading)g Ft(SIG)p -Fu(.)154 4515 y(40.)61 b(The)39 b Ft(trap)e Fu(builtin)i(do)s(esn't)g +Fu(.)154 4515 y(41.)61 b(The)39 b Ft(trap)e Fu(builtin)i(do)s(esn't)g (c)m(hec)m(k)h(the)g(\014rst)e(argumen)m(t)i(for)e(a)i(p)s(ossible)e (signal)i(sp)s(eci\014cation)330 4625 y(and)30 b(rev)m(ert)i(the)e (signal)i(handling)e(to)h(the)g(original)h(disp)s(osition)e(if)h(it)g @@ -15585,11 +15589,11 @@ Fu(.)154 4515 y(40.)61 b(The)39 b Ft(trap)e Fu(builtin)i(do)s(esn't)g b(If)28 b(users)g(w)m(an)m(t)h(to)g(reset)g(the)g(handler)330 4844 y(for)h(a)g(giv)m(en)h(signal)g(to)f(the)h(original)g(disp)s (osition,)f(they)g(should)f(use)h(`)p Ft(-)p Fu(')g(as)g(the)g(\014rst) -f(argumen)m(t.)154 4982 y(41.)61 b(The)21 b Ft(.)h Fu(and)f +f(argumen)m(t.)154 4982 y(42.)61 b(The)21 b Ft(.)h Fu(and)f Ft(source)f Fu(builtins)h(do)g(not)h(searc)m(h)h(the)f(curren)m(t)f (directory)h(for)g(the)g(\014lename)f(argumen)m(t)330 5092 y(if)30 b(it)h(is)g(not)f(found)f(b)m(y)i(searc)m(hing)g -Ft(PATH)p Fu(.)154 5230 y(42.)61 b(Enabling)21 b Fm(posix)g +Ft(PATH)p Fu(.)154 5230 y(43.)61 b(Enabling)21 b Fm(posix)g Fu(mo)s(de)g(has)g(the)g(e\013ect)i(of)e(setting)i(the)e Ft(inherit_errexit)d Fu(option,)23 b(so)f(subshells)330 5340 y(spa)m(wned)27 b(to)i(execute)g(command)e(substitutions)h @@ -15601,30 +15605,30 @@ b(Bash)30 b(F)-8 b(eatures)2439 b(103)330 299 y(paren)m(t)37 b(shell.)62 b(When)37 b(the)g Ft(inherit_errexit)c Fu(option)38 b(is)f(not)h(enabled,)h(Bash)e(clears)h(the)g Ft(-e)330 408 y Fu(option)31 b(in)f(suc)m(h)g(subshells.)154 542 -y(43.)61 b(Enabling)32 b Fm(posix)f Fu(mo)s(de)h(has)g(the)h(e\013ect)g +y(44.)61 b(Enabling)32 b Fm(posix)f Fu(mo)s(de)h(has)g(the)h(e\013ect)g (of)g(setting)g(the)g Ft(shift_verbose)28 b Fu(option,)34 b(so)e(n)m(umeric)330 652 y(argumen)m(ts)f(to)g Ft(shift)f Fu(that)h(exceed)h(the)e(n)m(um)m(b)s(er)g(of)h(p)s(ositional)g (parameters)g(will)g(result)g(in)f(an)330 762 y(error)g(message.)154 -896 y(44.)61 b(When)43 b(the)g Ft(alias)f Fu(builtin)g(displa)m(ys)i +896 y(45.)61 b(When)43 b(the)g Ft(alias)f Fu(builtin)g(displa)m(ys)i (alias)g(de\014nitions,)i(it)d(do)s(es)g(not)g(displa)m(y)h(them)f (with)g(a)330 1005 y(leading)31 b(`)p Ft(alias)e Fu(')i(unless)f(the)g -Ft(-p)g Fu(option)h(is)f(supplied.)154 1139 y(45.)61 +Ft(-p)g Fu(option)h(is)f(supplied.)154 1139 y(46.)61 b(When)40 b(the)g Ft(set)f Fu(builtin)h(is)g(in)m(v)m(ok)m(ed)h (without)f(options,)j(it)e(do)s(es)f(not)g(displa)m(y)g(shell)g (function)330 1249 y(names)30 b(and)g(de\014nitions.)154 -1383 y(46.)61 b(When)36 b(the)g Ft(set)g Fu(builtin)g(is)g(in)m(v)m(ok) +1383 y(47.)61 b(When)36 b(the)g Ft(set)g Fu(builtin)g(is)g(in)m(v)m(ok) m(ed)i(without)e(options,)i(it)f(displa)m(ys)f(v)-5 b(ariable)37 b(v)-5 b(alues)37 b(without)330 1492 y(quotes,)26 b(unless)d(they)i (con)m(tain)g(shell)f(metac)m(haracters,)k(ev)m(en)d(if)f(the)g(result) g(con)m(tains)i(nonprin)m(ting)330 1602 y(c)m(haracters.)154 -1736 y(47.)61 b(When)35 b(the)g Ft(cd)f Fu(builtin)h(is)g(in)m(v)m(ok)m +1736 y(48.)61 b(When)35 b(the)g Ft(cd)f Fu(builtin)h(is)g(in)m(v)m(ok)m (ed)i(in)d Fr(logical)41 b Fu(mo)s(de,)36 b(and)f(the)g(pathname)g (constructed)g(from)330 1845 y Ft($PWD)i Fu(and)h(the)h(directory)f (name)h(supplied)e(as)i(an)f(argumen)m(t)h(do)s(es)f(not)g(refer)h(to)g (an)f(existing)330 1955 y(directory)-8 b(,)32 b Ft(cd)d Fu(will)i(fail)g(instead)g(of)f(falling)h(bac)m(k)h(to)f -Fr(ph)m(ysical)j Fu(mo)s(de.)154 2089 y(48.)61 b(When)37 +Fr(ph)m(ysical)j Fu(mo)s(de.)154 2089 y(49.)61 b(When)37 b(the)h Ft(cd)f Fu(builtin)g(cannot)h(c)m(hange)h(a)f(directory)g(b)s (ecause)g(the)g(length)g(of)f(the)h(pathname)330 2198 y(constructed)52 b(from)f Ft($PWD)f Fu(and)g(the)i(directory)g(name)f @@ -15632,46 +15636,46 @@ y(constructed)52 b(from)f Ft($PWD)f Fu(and)g(the)i(directory)g(name)f y Fr(P)-8 b(A)g(TH)p 584 2308 28 4 v 41 w(MAX)42 b Fu(when)31 b(all)j(sym)m(b)s(olic)e(links)h(are)f(expanded,)h Ft(cd)f Fu(will)g(fail)h(instead)g(of)g(attempting)330 2418 y(to)e(use)f(only)h -(the)f(supplied)f(directory)i(name.)154 2552 y(49.)61 +(the)f(supplied)f(directory)i(name.)154 2552 y(50.)61 b(The)36 b Ft(pwd)f Fu(builtin)h(v)m(eri\014es)h(that)g(the)f(v)-5 b(alue)37 b(it)g(prin)m(ts)e(is)i(the)f(same)h(as)f(the)h(curren)m(t)f (directory)-8 b(,)330 2661 y(ev)m(en)31 b(if)f(it)h(is)g(not)f(ask)m (ed)h(to)g(c)m(hec)m(k)h(the)f(\014le)f(system)h(with)f(the)h -Ft(-P)e Fu(option.)154 2795 y(50.)61 b(When)35 b(listing)g(the)g +Ft(-P)e Fu(option.)154 2795 y(51.)61 b(When)35 b(listing)g(the)g (history)-8 b(,)36 b(the)f Ft(fc)g Fu(builtin)f(do)s(es)g(not)h (include)g(an)f(indication)i(of)f(whether)f(or)330 2905 y(not)d(a)f(history)h(en)m(try)f(has)g(b)s(een)g(mo)s(di\014ed.)154 -3039 y(51.)61 b(The)30 b(default)g(editor)h(used)f(b)m(y)g -Ft(fc)g Fu(is)g Ft(ed)p Fu(.)154 3173 y(52.)61 b(The)37 +3039 y(52.)61 b(The)30 b(default)g(editor)h(used)f(b)m(y)g +Ft(fc)g Fu(is)g Ft(ed)p Fu(.)154 3173 y(53.)61 b(The)37 b Ft(type)g Fu(and)g Ft(command)f Fu(builtins)i(will)g(not)g(rep)s(ort) f(a)i(non-executable)g(\014le)f(as)g(ha)m(ving)h(b)s(een)330 3282 y(found,)26 b(though)h(the)g(shell)g(will)g(attempt)h(to)g (execute)g(suc)m(h)f(a)g(\014le)g(if)g(it)g(is)g(the)g(only)g(so-named) g(\014le)330 3392 y(found)i(in)h Ft($PATH)p Fu(.)154 -3526 y(53.)61 b(The)33 b Ft(vi)f Fu(editing)i(mo)s(de)f(will)g(in)m(v)m +3526 y(54.)61 b(The)33 b Ft(vi)f Fu(editing)i(mo)s(de)f(will)g(in)m(v)m (ok)m(e)i(the)e Ft(vi)g Fu(editor)h(directly)f(when)f(the)i(`)p Ft(v)p Fu(')f(command)g(is)g(run,)330 3635 y(instead)e(of)f(c)m(hec)m (king)i Ft($VISUAL)d Fu(and)g Ft($EDITOR)p Fu(.)154 3769 -y(54.)61 b(When)41 b(the)g Ft(xpg_echo)e Fu(option)i(is)g(enabled,)j +y(55.)61 b(When)41 b(the)g Ft(xpg_echo)e Fu(option)i(is)g(enabled,)j (Bash)d(do)s(es)g(not)g(attempt)h(to)g(in)m(terpret)f(an)m(y)h(ar-)330 3879 y(gumen)m(ts)35 b(to)g Ft(echo)e Fu(as)i(options.)54 b(Eac)m(h)35 b(argumen)m(t)g(is)f(displa)m(y)m(ed,)j(after)e(escap)s(e) g(c)m(haracters)h(are)330 3988 y(con)m(v)m(erted.)154 -4122 y(55.)61 b(The)30 b Ft(ulimit)f Fu(builtin)g(uses)h(a)h(blo)s(c)m +4122 y(56.)61 b(The)30 b Ft(ulimit)f Fu(builtin)g(uses)h(a)h(blo)s(c)m (k)g(size)g(of)g(512)g(b)m(ytes)g(for)f(the)h Ft(-c)f -Fu(and)g Ft(-f)f Fu(options.)154 4256 y(56.)61 b(The)39 +Fu(and)g Ft(-f)f Fu(options.)154 4256 y(57.)61 b(The)39 b(arriv)-5 b(al)41 b(of)f Ft(SIGCHLD)e Fu(when)h(a)h(trap)g(is)g(set)h (on)f Ft(SIGCHLD)e Fu(do)s(es)h(not)h(in)m(terrupt)g(the)g Ft(wait)330 4366 y Fu(builtin)c(and)h(cause)g(it)h(to)f(return)f (immediately)-8 b(.)62 b(The)37 b(trap)f(command)h(is)g(run)e(once)j (for)f(eac)m(h)330 4475 y(c)m(hild)31 b(that)g(exits.)154 -4609 y(57.)61 b(The)27 b Ft(read)f Fu(builtin)g(ma)m(y)i(b)s(e)e(in)m +4609 y(58.)61 b(The)27 b Ft(read)f Fu(builtin)g(ma)m(y)i(b)s(e)e(in)m (terrupted)h(b)m(y)g(a)h(signal)f(for)g(whic)m(h)g(a)h(trap)f(has)g(b)s (een)f(set.)40 b(If)27 b(Bash)330 4719 y(receiv)m(es)41 b(a)f(trapp)s(ed)e(signal)i(while)f(executing)h Ft(read)p Fu(,)h(the)e(trap)h(handler)e(executes)i(and)f Ft(read)330 4829 y Fu(returns)29 b(an)h(exit)i(status)e(greater)i(than)e(128.)154 -4963 y(58.)61 b(Bash)27 b(remo)m(v)m(es)h(an)e(exited)i(bac)m(kground)e +4963 y(59.)61 b(Bash)27 b(remo)m(v)m(es)h(an)e(exited)i(bac)m(kground)e (pro)s(cess's)h(status)g(from)f(the)h(list)g(of)g(suc)m(h)f(statuses)h (after)330 5072 y(the)k Ft(wait)e Fu(builtin)h(is)g(used)g(to)h(obtain) g(it.)275 5230 y(There)j(is)g(other)h Fm(posix)f Fu(b)s(eha)m(vior)h diff --git a/subst.c b/subst.c index 12c59300..7b91a48f 100644 --- a/subst.c +++ b/subst.c @@ -7175,6 +7175,11 @@ parameter_brace_expand_rhs (name, value, op, quoted, pflags, qdollaratp, hasdoll w->flags &= ~W_SAWQUOTEDNULL; free (t1); + /* If we convert a null string into a quoted null, make sure the caller + knows it. */ + if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) && QUOTED_NULL (w->word)) + w->flags |= W_HASQUOTEDNULL; + return w; }