[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.