freebsd-skq/bin
Jilles Tjoelker acd7984f96 sh: Don't do optimized command substitution if expansions have side effects.
Before considering to execute a command substitution in the same process,
check if any of the expansions may have a side effect; if so, execute it in
a new process just like happens if it is not a single simple command.

Although the check happens at run time, it is a static check that does not
depend on current state. It is triggered by:
- expanding $! (which may cause the job to be remembered)
- ${var=value} default value assignment
- assignment operators in arithmetic
- parameter substitutions in arithmetic except ${#param}, $$, $# and $?
- command substitutions in arithmetic

This means that $((v+1)) does not prevent optimized command substitution,
whereas $(($v+1)) does, because $v might expand to something containing
assignment operators.

Scripts should not depend on these exact details for correctness. It is also
imaginable to have the shell fork if and when a side effect is encountered
or to create a new temporary namespace for variables.

Due to the $! change, the construct $(jobs $!) no longer works. The value of
$! should be stored in a variable outside command substitution first.
2010-12-28 21:27:08 +00:00
..
cat Removed redundant WARNS setting. 2009-10-15 18:17:29 +00:00
chflags mdoc: drop redundant .Pp and .LP calls 2010-10-08 12:40:16 +00:00
chio Zero struct before reading from it 2010-06-02 09:34:41 +00:00
chmod - Don't include both <sys/types.h> and <sys/param.h> 2009-09-02 05:26:59 +00:00
cp Don't try to copy a socket after "xxx is a socket (not copied)." message. 2010-06-05 08:50:39 +00:00
csh Move most of the remaining USD/PSD/SMM papers into share/doc 2010-12-04 10:11:20 +00:00
date Explain that setting an absolute day value can fail and that the month should 2010-06-04 06:56:58 +00:00
dd
df Staticify internal routines. 2009-06-23 23:30:56 +00:00
domainname
echo echo(1): Clarify portability and mention literal "--" handling. 2010-11-12 22:43:40 +00:00
ed ed(1): make WARNS=6 clean 2010-03-04 16:08:01 +00:00
expr expr(1): Add sh(1) versions of examples, remove an incorrect example. 2010-09-09 21:59:53 +00:00
getfacl More mdoc nitpicking to improve compatibility to mdocml 2010-06-11 06:04:07 +00:00
hostname Staticify internal routines. 2009-06-23 23:30:56 +00:00
kenv Add missing `void' for function without arguments. 2009-12-29 08:45:07 +00:00
kill sh: Add kill builtin. 2010-12-21 22:47:34 +00:00
ln Spelling fixes. 2010-07-31 21:09:49 +00:00
ls Change all our own code to use st_*tim instead of st_*timespec. 2010-03-28 13:16:08 +00:00
mkdir
mv Add NFSv4 ACL support to mv(1). 2009-09-04 21:49:37 +00:00
pax Touch the man page date after updating the ustar limitations. 2010-08-29 12:17:16 +00:00
pkill Add -l to the synopsis 2010-07-12 01:58:46 +00:00
ps Make a thread's address available via the kern proc sysctl, just like the 2010-10-08 00:44:53 +00:00
pwait mdoc: order prologue macros consistently by Dd/Dt/Os 2010-04-14 19:08:06 +00:00
pwd
rcp Change all our own code to use st_*tim instead of st_*timespec. 2010-03-28 13:16:08 +00:00
realpath
rm Fix typo and grammar nit 2010-10-31 19:16:54 +00:00
rmail Bump WARNS where possible. 2010-02-15 14:07:40 +00:00
rmdir
setfacl Typo fix: s/ommited/omitted 2010-07-27 17:33:02 +00:00
sh sh: Don't do optimized command substitution if expansions have side effects. 2010-12-28 21:27:08 +00:00
sleep Document the new argument parser for sleep(1) and SIGINFO behaviour. 2010-08-02 10:59:23 +00:00
stty Add a new libc function: cfmakesane(3). 2010-11-02 17:00:56 +00:00
sync
test test: Move tests to tools/regression/bin/test. 2010-11-08 23:15:10 +00:00
uuidgen Removed redundant WARNS setting. 2009-10-15 18:17:29 +00:00
Makefile Merge from tbemd: 2010-09-13 01:29:51 +00:00
Makefile.inc