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:
[ x = xfoo ]
and
[ = foo ]
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.
when $VAR is empty it would give a syntax error [ = "VALUE"]
, thus the usage of x
This is an old technique to prevent either side of the comparison from being empty. Some shells don't handle empty strings properly.
you have got your explanations, but here's another approach, using case/esac
instead of if/else
case "$VAR" in
"$VALUE" ) echo 'yes';;
* ) echo 'no' ;;
esac
精彩评论