summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorjilles <jilles@FreeBSD.org>2009-10-24 21:20:04 +0000
committerjilles <jilles@FreeBSD.org>2009-10-24 21:20:04 +0000
commitae4c008ec3d9b67e1adc09d619f972b0838e282b (patch)
tree630a88562311f15ec50712a00b864472ebea5f86 /bin
parent78d7070a590cfdd525d736fd6bd44f7939cb200b (diff)
downloadFreeBSD-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.c2
-rw-r--r--bin/sh/sh.17
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
OpenPOWER on IntegriCloud