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