bug-bash
[Top][All Lists]
Advanced

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

Re: Bug in [ -d ... ] ?


From: Michael F Gordon
Subject: Re: Bug in [ -d ... ] ?
Date: Thu, 2 Nov 2017 16:54:48 +0000
User-agent: Mutt/1.5.20 (2009-12-10)

On Thu, Nov 02, 2017 at 09:47:24AM -0400, Greg Wooledge wrote:
> Quoting failure.
> 
> wooledg:~$ unset FOO
> wooledg:~$ if [ -d "${FOO:=""}" ]; then echo yes; else echo no; fi
> no
> 
> With quotes the command is transformed to
> 
> [ -d "" ]
> 
> Without quotes it becomes
> 
> [ -d ]
> 
> A single-argument test command simply checks whether the string (-d in
> this case) is nonzero length.  It is equivalent to
> 
> [ -n -d ]

Interesting.  This is the way "[" has always been documented to work, but 
something has changed in newer versions of the shell - the unquoted version

  if [ -d ${FOO:=""} ]; then echo yes; else echo no; fi

gives "yes" on 4.2 onwards but "no" on 4.1.  Also, replacing := with :-
gives "no" on both versions when unquoted or unquoted.  I think I'll just
rewrite this bit of the script to separate the assignment and test.


Michael
-- 
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]