blob: fe830f0ef5cd6ee53c8e468769d1e4fae78e4b0e [file] [log] [blame]
Jari Aalto95732b42005-12-07 14:08:12 +000016.11 Bash POSIX Mode
2====================
Jari Aalto726f6381996-08-26 18:22:31 +00003
Jari Aaltoccc6cda1996-12-23 17:02:34 +00004Starting Bash with the `--posix' command-line option or executing `set
5-o posix' while Bash is running will cause Bash to conform more closely
Jari Aalto06285672006-10-10 14:15:34 +00006to the POSIX standard by changing the behavior to match that specified
7by POSIX in areas where the Bash default differs.
Jari Aalto726f6381996-08-26 18:22:31 +00008
Jari Aalto7117c2d2002-07-17 14:10:11 +00009When invoked as `sh', Bash enters POSIX mode after reading the startup
10files.
11
Jari Aaltoccc6cda1996-12-23 17:02:34 +000012The following list is what's changed when `POSIX mode' is in effect:
Jari Aalto726f6381996-08-26 18:22:31 +000013
Jari Aaltoccc6cda1996-12-23 17:02:34 +000014 1. When a command in the hash table no longer exists, Bash will
15 re-search `$PATH' to find the new location. This is also
16 available with `shopt -s checkhash'.
Jari Aalto726f6381996-08-26 18:22:31 +000017
Jari Aalto28ef6c32001-04-06 19:14:31 +000018 2. The message printed by the job control code and builtins when a job
19 exits with a non-zero status is `Done(status)'.
Jari Aalto726f6381996-08-26 18:22:31 +000020
Jari Aaltoccc6cda1996-12-23 17:02:34 +000021 3. The message printed by the job control code and builtins when a job
Jari Aalto28ef6c32001-04-06 19:14:31 +000022 is stopped is `Stopped(SIGNAME)', where SIGNAME is, for example,
23 `SIGTSTP'.
Jari Aalto726f6381996-08-26 18:22:31 +000024
Jari Aalto95732b42005-12-07 14:08:12 +000025 4. The `bg' builtin uses the required format to describe each job
26 placed in the background, which does not include an indication of
27 whether the job is the current or previous job.
Jari Aalto726f6381996-08-26 18:22:31 +000028
Jari Aalto95732b42005-12-07 14:08:12 +000029 5. Reserved words appearing in a context where reserved words are
30 recognized do not undergo alias expansion.
31
Jari Aalto06285672006-10-10 14:15:34 +000032 6. The POSIX `PS1' and `PS2' expansions of `!' to the history number
33 and `!!' to `!' are enabled, and parameter expansion is performed
34 on the values of `PS1' and `PS2' regardless of the setting of the
35 `promptvars' option.
Jari Aalto726f6381996-08-26 18:22:31 +000036
Jari Aalto06285672006-10-10 14:15:34 +000037 7. The POSIX startup files are executed (`$ENV') rather than the
38 normal Bash files.
Jari Aalto726f6381996-08-26 18:22:31 +000039
Jari Aalto95732b42005-12-07 14:08:12 +000040 8. Tilde expansion is only performed on assignments preceding a
Jari Aaltoccc6cda1996-12-23 17:02:34 +000041 command name, rather than on all assignment statements on the line.
Jari Aalto726f6381996-08-26 18:22:31 +000042
Chet Rameyac50fba2014-02-26 09:36:43 -050043 9. The `command' builtin does not prevent builtins that take
44 assignment statements as arguments from expanding them as
45 assignment statements; when not in POSIX mode, assignment builtins
46 lose their assignment statement expansion properties when preceded
47 by `command'.
48
49 10. The default history file is `~/.sh_history' (this is the default
Jari Aaltoccc6cda1996-12-23 17:02:34 +000050 value of `$HISTFILE').
Jari Aalto726f6381996-08-26 18:22:31 +000051
Chet Rameyac50fba2014-02-26 09:36:43 -050052 11. The output of `kill -l' prints all the signal names on a single
Jari Aaltob80f6442004-07-27 13:29:18 +000053 line, separated by spaces, without the `SIG' prefix.
54
Chet Rameyac50fba2014-02-26 09:36:43 -050055 12. The `kill' builtin does not accept signal names with a `SIG'
Jari Aaltob80f6442004-07-27 13:29:18 +000056 prefix.
Jari Aalto726f6381996-08-26 18:22:31 +000057
Chet Rameyac50fba2014-02-26 09:36:43 -050058 13. Non-interactive shells exit if FILENAME in `.' FILENAME is not
Jari Aaltoccc6cda1996-12-23 17:02:34 +000059 found.
Jari Aalto726f6381996-08-26 18:22:31 +000060
Chet Rameyac50fba2014-02-26 09:36:43 -050061 14. Non-interactive shells exit if a syntax error in an arithmetic
Jari Aaltocce855b1998-04-17 19:52:44 +000062 expansion results in an invalid expression.
63
Chet Rameyac50fba2014-02-26 09:36:43 -050064 15. Non-interactive shells exit if there is a syntax error in a script
Chet Ramey495aee42011-11-22 19:11:26 -050065 read with the `.' or `source' builtins, or in a string processed by
66 the `eval' builtin.
67
Chet Rameyac50fba2014-02-26 09:36:43 -050068 16. Redirection operators do not perform filename expansion on the word
Jari Aaltoccc6cda1996-12-23 17:02:34 +000069 in the redirection unless the shell is interactive.
Jari Aalto726f6381996-08-26 18:22:31 +000070
Chet Rameyac50fba2014-02-26 09:36:43 -050071 17. Redirection operators do not perform word splitting on the word in
Jari Aaltobb706242000-03-17 21:46:59 +000072 the redirection.
73
Chet Rameyac50fba2014-02-26 09:36:43 -050074 18. Function names must be valid shell `name's. That is, they may not
Jari Aaltoccc6cda1996-12-23 17:02:34 +000075 contain characters other than letters, digits, and underscores, and
Jari Aaltocce855b1998-04-17 19:52:44 +000076 may not start with a digit. Declaring a function with an invalid
Jari Aaltoccc6cda1996-12-23 17:02:34 +000077 name causes a fatal syntax error in non-interactive shells.
Jari Aalto726f6381996-08-26 18:22:31 +000078
Chet Rameyac50fba2014-02-26 09:36:43 -050079 19. Function names may not be the same as one of the POSIX special
80 builtins.
81
82 20. POSIX special builtins are found before shell functions during
Jari Aalto06285672006-10-10 14:15:34 +000083 command lookup.
Jari Aalto726f6381996-08-26 18:22:31 +000084
Chet Rameyac50fba2014-02-26 09:36:43 -050085 21. The `time' reserved word may be used by itself as a command. When
Chet Ramey495aee42011-11-22 19:11:26 -050086 used in this way, it displays timing statistics for the shell and
87 its completed children. The `TIMEFORMAT' variable controls the
88 format of the timing information.
89
Chet Rameyac50fba2014-02-26 09:36:43 -050090 22. When parsing and expanding a ${...} expansion that appears within
Chet Ramey495aee42011-11-22 19:11:26 -050091 double quotes, single quotes are no longer special and cannot be
92 used to quote a closing brace or other special character, unless
93 the operator is one of those defined to perform pattern removal.
94 In this case, they do not have to appear as matched pairs.
95
Chet Rameyac50fba2014-02-26 09:36:43 -050096 23. The parser does not recognize `time' as a reserved word if the next
Chet Ramey495aee42011-11-22 19:11:26 -050097 token begins with a `-'.
98
Chet Rameyac50fba2014-02-26 09:36:43 -050099 24. If a POSIX special builtin returns an error status, a
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000100 non-interactive shell exits. The fatal errors are those listed in
Jari Aalto06285672006-10-10 14:15:34 +0000101 the POSIX standard, and include things like passing incorrect
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000102 options, redirection errors, variable assignment errors for
103 assignments preceding the command name, and so on.
Jari Aalto726f6381996-08-26 18:22:31 +0000104
Chet Rameyac50fba2014-02-26 09:36:43 -0500105 25. A non-interactive shell exits with an error status if a variable
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000106 assignment error occurs when no command name follows the assignment
107 statements. A variable assignment error occurs, for example, when
Jari Aaltocce855b1998-04-17 19:52:44 +0000108 trying to assign a value to a readonly variable.
Jari Aalto726f6381996-08-26 18:22:31 +0000109
Chet Rameyac50fba2014-02-26 09:36:43 -0500110 26. A non-interactive shell exits with an error status if a variable
Chet Ramey495aee42011-11-22 19:11:26 -0500111 assignment error occurs in an assignment statement preceding a
112 special builtin, but not with any other simple command.
113
Chet Rameyac50fba2014-02-26 09:36:43 -0500114 27. A non-interactive shell exits with an error status if the iteration
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000115 variable in a `for' statement or the selection variable in a
Jari Aaltocce855b1998-04-17 19:52:44 +0000116 `select' statement is a readonly variable.
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000117
Chet Rameyac50fba2014-02-26 09:36:43 -0500118 28. Process substitution is not available.
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000119
Chet Rameyac50fba2014-02-26 09:36:43 -0500120 29. While variable indirection is available, it may not be applied to
121 the `#' and `?' special parameters.
122
123 30. Assignment statements preceding POSIX special builtins persist in
Jari Aalto06285672006-10-10 14:15:34 +0000124 the shell environment after the builtin completes.
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000125
Chet Rameyac50fba2014-02-26 09:36:43 -0500126 31. Assignment statements preceding shell function calls persist in the
Jari Aalto28ef6c32001-04-06 19:14:31 +0000127 shell environment after the function returns, as if a POSIX
128 special builtin command had been executed.
129
Chet Rameyac50fba2014-02-26 09:36:43 -0500130 32. The `export' and `readonly' builtin commands display their output
Jari Aalto06285672006-10-10 14:15:34 +0000131 in the format required by POSIX.
Jari Aaltod166f041997-06-05 14:59:13 +0000132
Chet Rameyac50fba2014-02-26 09:36:43 -0500133 33. The `trap' builtin displays signal names without the leading `SIG'.
Jari Aalto28ef6c32001-04-06 19:14:31 +0000134
Chet Rameyac50fba2014-02-26 09:36:43 -0500135 34. The `trap' builtin doesn't check the first argument for a possible
Jari Aaltob80f6442004-07-27 13:29:18 +0000136 signal specification and revert the signal handling to the original
Jari Aalto95732b42005-12-07 14:08:12 +0000137 disposition if it is, unless that argument consists solely of
138 digits and is a valid signal number. If users want to reset the
139 handler for a given signal to the original disposition, they
140 should use `-' as the first argument.
Jari Aaltob80f6442004-07-27 13:29:18 +0000141
Chet Rameyac50fba2014-02-26 09:36:43 -0500142 35. The `.' and `source' builtins do not search the current directory
Jari Aalto28ef6c32001-04-06 19:14:31 +0000143 for the filename argument if it is not found by searching `PATH'.
144
Chet Rameyac50fba2014-02-26 09:36:43 -0500145 36. Subshells spawned to execute command substitutions inherit the
Jari Aalto28ef6c32001-04-06 19:14:31 +0000146 value of the `-e' option from the parent shell. When not in POSIX
147 mode, Bash clears the `-e' option in such subshells.
148
Chet Rameyac50fba2014-02-26 09:36:43 -0500149 37. Alias expansion is always enabled, even in non-interactive shells.
Jari Aalto28ef6c32001-04-06 19:14:31 +0000150
Chet Rameyac50fba2014-02-26 09:36:43 -0500151 38. When the `alias' builtin displays alias definitions, it does not
Jari Aaltob80f6442004-07-27 13:29:18 +0000152 display them with a leading `alias ' unless the `-p' option is
153 supplied.
154
Chet Rameyac50fba2014-02-26 09:36:43 -0500155 39. When the `set' builtin is invoked without options, it does not
Jari Aalto28ef6c32001-04-06 19:14:31 +0000156 display shell function names and definitions.
157
Chet Rameyac50fba2014-02-26 09:36:43 -0500158 40. When the `set' builtin is invoked without options, it displays
Jari Aalto7117c2d2002-07-17 14:10:11 +0000159 variable values without quotes, unless they contain shell
160 metacharacters, even if the result contains nonprinting characters.
161
Chet Rameyac50fba2014-02-26 09:36:43 -0500162 41. When the `cd' builtin is invoked in LOGICAL mode, and the pathname
Jari Aalto7117c2d2002-07-17 14:10:11 +0000163 constructed from `$PWD' and the directory name supplied as an
164 argument does not refer to an existing directory, `cd' will fail
165 instead of falling back to PHYSICAL mode.
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000166
Chet Rameyac50fba2014-02-26 09:36:43 -0500167 42. The `pwd' builtin verifies that the value it prints is the same as
Jari Aalto95732b42005-12-07 14:08:12 +0000168 the current directory, even if it is not asked to check the file
169 system with the `-P' option.
Jari Aaltoccc6cda1996-12-23 17:02:34 +0000170
Chet Rameyac50fba2014-02-26 09:36:43 -0500171 43. When listing the history, the `fc' builtin does not include an
Jari Aalto95732b42005-12-07 14:08:12 +0000172 indication of whether or not a history entry has been modified.
Jari Aalto28ef6c32001-04-06 19:14:31 +0000173
Chet Rameyac50fba2014-02-26 09:36:43 -0500174 44. The default editor used by `fc' is `ed'.
Jari Aalto28ef6c32001-04-06 19:14:31 +0000175
Chet Rameyac50fba2014-02-26 09:36:43 -0500176 45. The `type' and `command' builtins will not report a non-executable
Jari Aalto95732b42005-12-07 14:08:12 +0000177 file as having been found, though the shell will attempt to
178 execute such a file if it is the only so-named file found in
179 `$PATH'.
180
Chet Rameyac50fba2014-02-26 09:36:43 -0500181 46. The `vi' editing mode will invoke the `vi' editor directly when
Jari Aalto31859422009-01-12 13:36:28 +0000182 the `v' command is run, instead of checking `$VISUAL' and
Jari Aalto95732b42005-12-07 14:08:12 +0000183 `$EDITOR'.
184
Chet Rameyac50fba2014-02-26 09:36:43 -0500185 47. When the `xpg_echo' option is enabled, Bash does not attempt to
Jari Aalto95732b42005-12-07 14:08:12 +0000186 interpret any arguments to `echo' as options. Each argument is
187 displayed, after escape characters are converted.
188
Chet Rameyac50fba2014-02-26 09:36:43 -0500189 48. The `ulimit' builtin uses a block size of 512 bytes for the `-c'
Jari Aalto31859422009-01-12 13:36:28 +0000190 and `-f' options.
191
Chet Rameyac50fba2014-02-26 09:36:43 -0500192 49. The arrival of `SIGCHLD' when a trap is set on `SIGCHLD' does not
Chet Ramey00018032011-11-21 20:51:19 -0500193 interrupt the `wait' builtin and cause it to return immediately.
194 The trap command is run once for each child that exits.
195
Chet Rameyac50fba2014-02-26 09:36:43 -0500196 50. The `read' builtin may be interrupted by a signal for which a trap
197 has been set. If Bash receives a trapped signal while executing
198 `read', the trap handler executes and `read' returns an exit
199 status greater than 128.
200
Jari Aalto95732b42005-12-07 14:08:12 +0000201
Jari Aalto06285672006-10-10 14:15:34 +0000202There is other POSIX behavior that Bash does not implement by default
203even when in POSIX mode. Specifically:
Jari Aalto95732b42005-12-07 14:08:12 +0000204
205 1. The `fc' builtin checks `$EDITOR' as a program to edit history
206 entries if `FCEDIT' is unset, rather than defaulting directly to
207 `ed'. `fc' uses `ed' if `EDITOR' is unset.
208
209 2. As noted above, Bash requires the `xpg_echo' option to be enabled
210 for the `echo' builtin to be fully conformant.
211
212
213Bash can be configured to be POSIX-conformant by default, by specifying
214the `--enable-strict-posix-default' to `configure' when building (*note
215Optional Features::).
Jari Aalto28ef6c32001-04-06 19:14:31 +0000216