On Tuesday, January 15, 2013 03:20:20 AM Duncan wrote:
> 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."
While I agree, I wouldn't lose sleep over it. Both are perfectly acceptable
and nearly equal in clarity. [[ $x ]] is probably most common.
> Consider:
> ...
> 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 ]] && ...
-z is the negation. -n is the default. [[ $x ]] is rewritten internally as [[
-n $x ]]. [[ ! $x ]] == [[ ! -n $x ]] == [[ -z $x ]]. It's perfectly logical
that this expression evaluates true when given a non-empty value. As ''expr ||
die'' is the most expected form for error-checking, negating this with ''-z''
or otherwise makes little sense.
"Empty == False" is not an uncommon concept. e.g. python -c 'print(bool(""))'
> 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.
I wish people would stop referring to features that predate both Bash and
POSIX as "Bashisms". ''[['' is superior to and easier to understand than
''[''. Everyone should be familiar with both. As only Bash is relevant here,
''test'' and ''['' are mostly irrelevant. With few exceptions, ''[['' should
be preferred when available (and in this case, guaranteed available).
> 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.
The performance difference is considerable.
--
Dan Douglas
signature.asc
Description: This is a digitally signed message part.
