Mike Frysinger posted on Mon, 14 Jan 2013 17:09:51 -0500 as excerpted: >>> + [[ ${BUILD_DIR} ]] || die "${FUNCNAME}: BUILD_DIR not set." >> >> really should use -n there > >> Doesn't matter. > > the point wasn't "will it work". it's more "how easy is it to glance at > code and know what it is doing".
Indeed. But arguably standalone [[ ${var} ]] tests ARE easier to "know what it doing." Consider: 1) The [[ $var ]] case is exactly one of one. There's no misinterpreting it. Even if you don't know the rule by rote, given that it's a boolean test on a string, there's logically only one way to parse it. No mistakes to make. 2) By contrast, -n is only one of a whole list of -X style tests, and one must stop and think, "Let's see... Oh, yes, -n was non-null." 3) The situation in #2 is even worse than it might be due to the standalone alternative, making -n (and -z, #4) far less common than they would be otherwise. 4) You are arguing the "at a glance" position, but didn't even MENTION the needlessly negated logic of [[ -n $string ]] || ... , which could be rewritten to avoid the || negation as [[ -z $string ]] && ... 5) [[ ]] is already a bashism while the standalone string test is common shell. Surely you're not arguing that people familiar enough with the [[ ]] || construct to parse it at a glance can't equally capably parse the a standalone string test, given its use in non-bash shell context as well. 6) If you're arguing for explicit, be consistent, with explicit if/then, test, positive -z instead of negated -n logic... :: if test -z "${BUILD_DIR}"; then die "${FUNCTNAME}: BUILD_DIR not set." Obviously the example in #6 is taking it a bit far, but my point is, an explicit (if one-of-many) -z/-n test vs. the standalone (single-case) $string test really is personal preference. You obviously prefer it one way, others (including me) prefer the other... for the very same reason, to us, our preferred way is instantly parsable, while the other way triggers "extra processing". As such, IMO, "He who codes, decides." =:^) (IIRC I did bring up the same thing, naturally arguing my standalone string test preference, in an earlier eclass proposal thread. However, I believe I explicitly mentioned that I considered it a purely personal style thing and that others had the opposite preference, with to my knowledge no official gentoo coding style position taken on it. Given that I had seen, I think you, bring up the point before, I was hoping someone would post the gentoo style-guide link proving me wrong, if there was one. Given that nobody did so, I still believe it to be "he who codes, decides" territory.) -- Duncan - List replies preferred. No HTML msgs. "Every nonfree program has a lord, a master -- and if you use the program, he is your master." Richard Stallman