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).
This commit is contained in:
parent
941538c0f4
commit
64254a667a
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=198454
@ -657,7 +657,7 @@ evalvar(char *p, int flag)
|
||||
}
|
||||
varlen = 0;
|
||||
startloc = expdest - stackblock();
|
||||
if (!set && uflag) {
|
||||
if (!set && uflag && *var != '@' && *var != '*') {
|
||||
switch (subtype) {
|
||||
case VSNORMAL:
|
||||
case VSTRIMLEFT:
|
||||
|
@ -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
|
||||
|
12
tools/regression/bin/sh/expansion/set-u2.0
Normal file
12
tools/regression/bin/sh/expansion/set-u2.0
Normal file
@ -0,0 +1,12 @@
|
||||
# $FreeBSD$
|
||||
|
||||
set -u
|
||||
: $* $@ "$@" "$*"
|
||||
set -- x
|
||||
: $* $@ "$@" "$*"
|
||||
shift $#
|
||||
: $* $@ "$@" "$*"
|
||||
set -- y
|
||||
set --
|
||||
: $* $@ "$@" "$*"
|
||||
exit 0
|
Loading…
Reference in New Issue
Block a user