开发者

Why 'x' used in [ x"$VAR" = x"VALUE" ]?

开发者 https://www.devze.com 2023-01-04 03:32 出处:网络
I can see in unix shell scripts that following construction used开发者_运维技巧 [ x\"$VAR\" = x\"VALUE\" ]

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
0

精彩评论

暂无评论...
验证码 换一张
取 消