[arch-projects] [devtools] [PATCH 2/2] makechrootpkg: Fix anti-pattern when checking for enabled features

Luke Shumaker lukeshu at lukeshu.com
Sat Sep 2 03:56:03 UTC 2017


On Fri, 01 Sep 2017 18:53:13 -0400,
Eli Schwartz wrote:
> 
> Don't use error-prone logic e.g.
> foo=true; if $foo ...

Hey, I'm not to blame for this one :-)

> This invokes an extra process as opposed to a simple value comparison,

That's not quite true:

    $ type true
    true is a shell builtin
    $ type false
    false is a shell builtin

Bash won't actually make any syscalls when executing these commands in
a conditional.  Apparently the code paths within Bash are slightly
faster for `[[ $v = true ]]` than for `$v`, but that's negligible
compared to if it actually had to invoke an extra process as you said.

  Time for 1 million iterations:

    "v=true;      if $v; then ..."               |  7.1 sec
    "v=true;      if [[ $v = true ]]; then ..."  |  6.5 sec
    "v=/bin/true; if $v; then ..."               |  > 5 minutes (I got bored and killed it)

> in the process of completely failing to act as expected when the
> variable is unset because of unrelated bugs.

And that's the real reason that this change should be applied. :-)

-- 
Happy hacking,
~ Luke Shumaker


More information about the arch-projects mailing list