为了账号安全,请及时绑定邮箱和手机立即绑定

为什么Shell脚本比较经常使用x $ VAR = xyes?

为什么Shell脚本比较经常使用x $ VAR = xyes?

慕容708150 2019-11-13 14:03:49
我经常在使用自动工具(autoconf,automake)的项目的构建脚本中看到这种情况。当有人想要检查shell变量的值时,他们经常使用以下惯用法:if test "x$SHELL_VAR" = "xyes"; then...与像这样简单地检查值相比,这样做有什么好处:if test $SHELL_VAR = "yes"; then...我认为一定有某种原因使我经常看到这种情况,但我无法弄清楚它是什么。
查看完整描述

3 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

如果您使用的是执行简单替换的外壳,并且SHELL_VAR变量不存在(或为空),则需要注意边缘情况。以下翻译将发生:


if test $SHELL_VAR = yes; then        -->  if test = yes; then

if test x$SHELL_VAR = xyes; then      -->  if test x = xyes; then

由于test缺少第一个参数,第一个会产生错误。第二个没有那个问题。


您的案例翻译如下:


if test "x$SHELL_VAR" = "xyes"; then  -->  if test "x" = "xyes"; then

的x,至少对于符合POSIX的壳,实际上是多余的,因为引号随之而来的是两个空的参数和一个容纳空间被解释为单个对象。


查看完整回答
反对 回复 2019-11-13
  • 3 回答
  • 0 关注
  • 1013 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信