Re[2]: Possibly wrong handling of $_?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 24 Dec 2014 00:21:09 +0100 Harald van Dijk <harald@xxxxxxxxxxx> wrote:

HvD> On 23/12/2014 23:34, Vadim Zeitlin wrote:
HvD> >   Hello,
HvD> >
HvD> >   I'm not exactly sure if this is a bug because I didn't find any
HvD> > specification about how is this supposed to behave (to my surprise it
HvD> > turned out that $_ was not in POSIX), but please consider this:
HvD> >
HvD> > 	% zsh -c 'echo -n foo && echo $_'
HvD> > 	foofoo
HvD> > 	% bash -c 'echo -n foo && echo $_'
HvD> > 	foofoo
HvD> > 	% dash -c 'echo -n foo && echo $_'
HvD> > 	foo/usr/bin/dash
HvD> 
HvD> This does come across as somewhat confusing, but $_ is really not a 
HvD> special variable at all in dash.

 Ah, this does explain it, thanks!

HvD> If dash did something special with $_, then I agree it would be nice if 
HvD> it would be somewhat compatible with other shells. If dash simply does 
HvD> not implement a feature, that feature is not required by any standard, 
HvD> and that feature is not widely used, then I suspect there won't be a lot 
HvD> of interest in implementing that feature.

 Yes, I understand, somehow the idea that dash didn't implement it at all
just didn't occur to me, but clearly adding a non-standard new feature is
not nowhere near as important as fixing [what looked like] a bug. I'm not
sure about the "not widely part", but I don't have any non-anecdotal
evidence one way or the other.

HvD> Don't be put off by that, though. You are free, of course, if you feel 
HvD> so, to attempt to convince people $_ is an important feature that all 
HvD> shells should implement. If you have compelling use cases, if it solves 
HvD> real problems, and if many other shells already implement it, you might 
HvD> even get it standardised. I have never seen a need for it, but that's 
HvD> just me speaking from personal experience, others may feel differently.

 FWIW my initial problem started with using

	builddir := $(shell mkdir -p some-long-make-expression && echo $_)

in a makefile, which seemed like a nice way to assign the value to the
variable only if the directory was successfully created. This can, of
course, be done in a myriad of other ways, but this one just seemed like
the most elegant to me. Whether this counts as a "need" or not is not for
me to say.

 Personally I'd say the main argument for adding support for "$_" to dash
would be to avoid mysterious problems like the one I just had because dash
silently (i.e. without giving any errors) behaves differently from the
other shells, which in my case resulted in the makefile misbehaving only
under Debian (where dash is used as /bin/sh) but not under systems.

 Anyhow, thanks again for your explanation!
VZ

Attachment: pgprQPLMx8tKJ.pgp
Description: PGP signature


[Index of Archives]     [LARTC]     [Bugtraq]     [Yosemite Forum]     [Photo]

  Powered by Linux