Shell 脚本中的“[: too many arguments“错误

问题现场:

想判断一个变量是否等于某一个值。建立脚本:test.sh

#!/bin/bash
myvar="foo bar oni"
echo $myvar
if [ $myvar = "foo bar oni" ]
then
     echo "yes"
fi

报错:如果环境变量中恰巧有一个空格或制表键,bash 将无法分辨,从而无法正常工作。这里$myvar的值中有空格。这个错误可以理解为左边$mmyvar是三个arguments,即:foo bar oni = "foo bar oni","foo bar oni"是一个arguments,所以两者作比较的时候,变量个数不同,报错。

(tf) localhost:offline wang$ sh test.sh 
foo bar oni
test.sh: line 5: [: too many arguments

尝试一:将$myvar转为字符串

#!/bin/bash
myvar="foo bar oni"
echo $myvar
if [ "$myvar" = "foo bar oni" ]
then
     echo "yes"
fi

输出了yes,可见成功了,$myvar转为字符串后,表示一个变量。 

(tf) localhost:offline wang$ sh test.sh 
foo bar oni
yes

尝试二:改变$myvar的值,将其改为foo,也就是一个变量的情况。

#!/bin/bash
myvar="foo"
echo $myvar
if [ $myvar = "foo bar oni" ]; then
  echo "yes"
else
  echo "no"
fi

此时,if中的条件$myvar = "foo bar oni" 为false,即"foo" != "foo bar oni",输出no。

(tf) localhost:offline wang$ sh test.sh 
foo
no

总结:

1.if中的条件判断,如果是字符,则需要变量个数相等,并且bash无法识别空格或者tab键盘,此时需要自己修改判断条件。

2.养成将所有字符串自变量用双引号括起的习惯,将除去很多类似的编程错误。(如果要扩展环境变量,则必须将它们用 双引号、而不是单引号括起)

 

参考:

1.https://blog.csdn.net/wang_cir/article/details/6120101

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值