Funny Shell trick
While sorting out a debian .bashrc
file, I came across to this construct:
export HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoredups
I found interesting the ${HISTCONTROL+,}
construct, which will evaluate to a
comma (,
) if HISTCONTROL
is defined, to the empty string otherwise (I
checked).
It is useful to enrich (i.e., add while preserving the previous values) variables with new values that must be comma-separated.
I’ll try to explain this further.
Let’s assume that we have an enviroment variable FOO
that controls the
behaviour of some program. We want to make sure that the FOO
var holds the
value bar
, but we don’t know if some other scriptlet in the chain has
already set some other value(s) to this var. So, in order to preserve
possible preset values for FOO
, we do this:
export FOO=${FOO}${FOO+,}myfoo #¹
There are two obvious cases:
a) FOO
wasn’t previously set, hence FOO=myfoo
after ¹ is executed
b) FOO
was previously set with, say FOO=bar,baz
. Then, after ¹ is
executed, FOO
will be FOO=bar,baz,myfoo
. Note the comma between baz
and
myfoo
. That’s the doing of ${FOO+,}
.
Tags
bash