I can see in unix shell scripts that following construction used
[ x"$VAR" = x"VALUE" ]
instead of
[ "$VAR" = "VALUE" ]
Why?
I can see in unix shell scripts that following construction used
[ x"$VAR" = x"VALUE" ]
instead of
[ "$VAR" = "VALUE" ]
Why?
Because shells were not always entirely well-behaved if one of the variables was empty.
Consider if
$VAR
was empty/null and$VALUE
is "foo", your two constructs expand to:and
The latter would cause an error in some shells due to being an illegal construct, while the former is valid in any case. This is not a problem in recent version of bash (perhaps even old versions of bash) but that's where it comes from historically - and asides from the occasional moment of puzzlement from people in your situation, there's little reason not to do it for compatibility with a wider range of shells.
you have got your explanations, but here's another approach, using
case/esac
instead ofif/else
when $VAR is empty it would give a syntax error
[ = "VALUE"]
, thus the usage of xThis is an old technique to prevent either side of the comparison from being empty. Some shells don't handle empty strings properly.