Email List: Xaustin-group-lX
[All Lists]

Re: $@ and set -u

To: chet.ramey@xxxxxxxx
Subject: Re: $@ and set -u
From: Mike Frysinger <vapier@xxxxxxxxxx>
Date: Mon, 4 May 2009 19:37:55 -0400
Cc: David Korn <dgk@xxxxxxxxxxxxxxxx>, austin-group-l@xxxxxxxxxxxxx
Organization: wh0rd.org
References: <200904301329.n3UDTOXH005366@penguin.research.att.com> <49FEEF0E.9010109@case.edu>
On Monday 04 May 2009 09:35:10 Chet Ramey wrote:
> David Korn wrote:
> > cc:  chet.ramey@case.edu
> > Subject: Re: Re: $@ and set -u
> > --------
> >
> >> David Korn wrote:
> >>> I do not think that set -u should cause an error.
> >>>
> >>> The original purpose of set -u is to locate typing errors in which a
> >>> variable name is wrong.  When a script that works without set -u set,
> >>> and fails with set -u not set, this is often used as an indication that
> >>> the script has a bug.
> >>
> >> I find it interesting that no version of ksh behaves that way.  Are we
> >> standardizing existing practice, or new behavior?
> >>
> >> Here's the script I used to test my hypothesis:
> >>
> >> if [ $# -gt 0 ]; then
> >>    shift $#
> >> fi
> >> set -u
> >> echo "$@"
> >> echo after
> >>
> >> The only shell that outputs "after" is dash.  For instance:
> >>
> >> $ ksh93 -c 'echo ${.sh.version}'
> >> Version M 93t+ 2008-11-11
> >> $ ksh93 ./x8
> >> ./x8: line 5: @: parameter not set
> >> $ ./bash --version
> >> GNU bash, version 4.0.17(206)-maint (i386-apple-darwin9.4.0)
> >> Copyright (C) 2009 Free Software Foundation, Inc.
> >> License GPLv3+: GNU GPL version 3 or later
> >> <http://gnu.org/licenses/gpl.html>
> >>
> >> This is free software; you are free to change and redistribute it.
> >> There is NO WARRANTY, to the extent permitted by law.
> >> $ ./bash ./x8
> >> ./x8: line 5: $@: unbound variable
> >>
> >>
> >>
> >>
> >> Chet
> >> --
> >> ``The lyf so short, the craft so long to lerne.'' - Chaucer
> >>
> >> Chet Ramey, ITS, CWRU    chet@case.edu   
> >> http://cnswww.cns.cwru.edu/~chet/
> >
> > My response only considered what the standard says and why set -u was
> > added to the shell.  It didn't consider actual practice.
> >
> > Going back to ksh88, and as Chet says, ksh93, -u applies to all
> > parameters not just variables.  I don't have a copy of the original
> > Bourne shell so I don't know what it did in practice.
> >
> > Personally, I like the way it is in the standard and will change ksh93
> > behavior to conform if there is concensus that the standard is correct
> > as stands.  This way, a script that runs should not get error when
> > invoked with sh -u unless there is a misspelled variable name or
> > an uninitialized variable.
> >
> > I will wait for a concensus to form before deciding to fix this.
>
> There has been resolute silence for several days.  Do you think we have
> consensus that the standard is correct as written, despite the
> disconnection with historical practice?

if the standard is deemed correct, then the fact that it was explicitly 
written with "variable" and not "parameter" should be reinforced in the text.
-mike

Attachment: signature.asc
Description: This is a digitally signed message part.

<Prev in Thread] Current Thread [Next in Thread>