diff options
author | jilles <jilles@FreeBSD.org> | 2009-10-24 21:20:04 +0000 |
---|---|---|
committer | jilles <jilles@FreeBSD.org> | 2009-10-24 21:20:04 +0000 |
commit | ae4c008ec3d9b67e1adc09d619f972b0838e282b (patch) | |
tree | 630a88562311f15ec50712a00b864472ebea5f86 /bin | |
parent | 78d7070a590cfdd525d736fd6bd44f7939cb200b (diff) | |
download | FreeBSD-src-ae4c008ec3d9b67e1adc09d619f972b0838e282b.zip FreeBSD-src-ae4c008ec3d9b67e1adc09d619f972b0838e282b.tar.gz |
sh: Exempt $@ and $* from set -u
This seems more useful and will likely be in the next POSIX standard.
Also document more precisely in the man page what set -u does (note that
$@, $* and $! are the only special parameters that can ever be unset, all
the others are always set, although they may be empty).
Diffstat (limited to 'bin')
-rw-r--r-- | bin/sh/expand.c | 2 | ||||
-rw-r--r-- | bin/sh/sh.1 | 7 |
2 files changed, 6 insertions, 3 deletions
diff --git a/bin/sh/expand.c b/bin/sh/expand.c index 700fa0a..af79e8c 100644 --- a/bin/sh/expand.c +++ b/bin/sh/expand.c @@ -657,7 +657,7 @@ again: /* jump here after setting a variable with ${var=text} */ } varlen = 0; startloc = expdest - stackblock(); - if (!set && uflag) { + if (!set && uflag && *var != '@' && *var != '*') { switch (subtype) { case VSNORMAL: case VSTRIMLEFT: diff --git a/bin/sh/sh.1 b/bin/sh/sh.1 index 937fda7..db872fd 100644 --- a/bin/sh/sh.1 +++ b/bin/sh/sh.1 @@ -32,7 +32,7 @@ .\" from: @(#)sh.1 8.6 (Berkeley) 5/4/95 .\" $FreeBSD$ .\" -.Dd May 31, 2009 +.Dd October 24, 2009 .Dt SH 1 .Os .Sh NAME @@ -296,7 +296,10 @@ sh -T -c "trap 'exit 1' 2 ; some-blocking-program" .Ed .It Fl u Li nounset Write a message to standard error when attempting -to expand a variable that is not set, and if the +to expand a variable, a positional parameter or +the special parameter +.Va \&! +that is not set, and if the shell is not interactive, exit immediately. .It Fl V Li vi Enable the built-in |