On 11/02/2017 06:03 AM, Michael F Gordon wrote: > Can anyone explain the following?
Yes. You used incorrect quoting. > > tla19> set|grep FOOFOOFOO > tla19> if [ -d ${FOOFOOFOO:=""} ]; then echo YES;fi > YES Because you forgot to quote the variable expansion, you ended up executing: if [ -d ]; then echo YES; fi and since the one-argument form of [] succeeds if the single argument is not the empty string, and -d is not the empty string, you got an answer of YES. If you want the two-argument form of [], which treats -d as a unary operator testing whether the second argument names a directory, then you should have written: if [ -d "${FOOFOOFOO:=""}" ]; ... > tla19> echo $BASH_VERSION > 4.4.12(1)-release > > I don't get YES printed with 4.1.2(1)-release on Scientific Linux 6. I do > with 4.2.46(1)-release on Scientific Linux 7 and it happens with the latest > release on both. Are you sure you tested correctly? test has always behaved differently for one argument than for two. At any rate, this is not a bug in bash, but more likely in your script. -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org
signature.asc
Description: OpenPGP digital signature