shell脚本if判断语句报错[: too many arguments的两种原因
2015-04-15 15:47
519 查看
shell脚本,if判断语句报错[: too many arguments
我遇到过两种情况:
脚本ee.sh:
strings1="hello world"
strings2="hello world"
if [ $strings1 = $strings2 ]
then
echo "strings1 is same as strings2"
else
echo "strings1 is different from strings2"
fi
执行结果中报错:
ee.sh: line 3: [: too many arguments
strings1 is different from strings2
并自动执行了else分支中的语句。
而下面这段语句就不会这样:
脚本ee.sh:
strings1="hello world"
strings2="hello world"
if [ "$strings1" = "$strings2" ]
then
echo "strings1 is same as strings2"
else
echo "strings1 is different from strings2"
fi
执行结果:strings1 is same as strings2
2、第二种是我自己初步接触shell脚本,很多语法规则不太熟悉时遇到的,我将其记为——多重判断:
还是以上面的例子,将第二段稍微改一下:
脚本ee.sh:
strings1="hello world"
strings2="hello world"
if [ "$strings1" = "$strings2" -eq 1 ]
then
echo "strings1 is same as strings2"
else
echo "strings1 is different from strings2"
fi
执行结果:
ee.sh: line 3: [: too many arguments
strings1 is different from strings2
这里是按照常规的思路来写的,“ "$strings1" = "$strings2"先判断两个字符串是否相等,如果相等这个结果就是true,而true在一般语言中通常可以等价于1,因此又将这个结果跟1进行比较”,其实在这个逻辑中,我忽略了"$strings1" = "$strings2"本身就是个判断条件,执行结果就是true或false,而不需要再对这个结果判断它是否是1.
我遇到过两种情况:
1、第一中情况就是网上大家说的,字符串变量中可能存在空格,shell解析时将其认为是多个参数,再进行判断时,无法知道该获取哪个值,例如:
脚本ee.sh:
strings1="hello world"
strings2="hello world"
if [ $strings1 = $strings2 ]
then
echo "strings1 is same as strings2"
else
echo "strings1 is different from strings2"
fi
执行结果中报错:
ee.sh: line 3: [: too many arguments
strings1 is different from strings2
并自动执行了else分支中的语句。
而下面这段语句就不会这样:
脚本ee.sh:
strings1="hello world"
strings2="hello world"
if [ "$strings1" = "$strings2" ]
then
echo "strings1 is same as strings2"
else
echo "strings1 is different from strings2"
fi
执行结果:strings1 is same as strings2
2、第二种是我自己初步接触shell脚本,很多语法规则不太熟悉时遇到的,我将其记为——多重判断:
还是以上面的例子,将第二段稍微改一下:
脚本ee.sh:
strings1="hello world"
strings2="hello world"
if [ "$strings1" = "$strings2" -eq 1 ]
then
echo "strings1 is same as strings2"
else
echo "strings1 is different from strings2"
fi
执行结果:
ee.sh: line 3: [: too many arguments
strings1 is different from strings2
这里是按照常规的思路来写的,“ "$strings1" = "$strings2"先判断两个字符串是否相等,如果相等这个结果就是true,而true在一般语言中通常可以等价于1,因此又将这个结果跟1进行比较”,其实在这个逻辑中,我忽略了"$strings1" = "$strings2"本身就是个判断条件,执行结果就是true或false,而不需要再对这个结果判断它是否是1.
相关文章推荐
- shell脚本if判断语句报错[: too many arguments的两种原因
- shell脚本,判断语句报错[: too many arguments
- shell中if语句中判断 [: too many arguments
- shell脚本中的逻辑判断,文件目录属性判断,if特殊用法,case语句
- 关于Shell 脚本中的"[: too many arguments"错误
- shell脚本编程:条件判断if语句使用小结
- 续写vim,shell脚本基础编辑,read命令,if与case判断语句,文件查找方式,压缩与解压,
- shell 脚本之判断语句 if 详解
- linux之基础shell脚本编程2 if语句循环判断
- [Shell] if、for、while流程语句以及整数字符串判断比较的实例详解
- Shell脚本IF条件判断和判断条件总结
- shell脚本编程之if语句学习笔记
- Shell脚本IF条件判断和判断条件总结
- shell脚本中的逻辑判断-文件目录属性判断-if特殊用法-case判断
- shell脚本之-if流程控制语句和for循环语句的使用
- shell 中 if 语句内判断参数总结
- Shell脚本基础6-if语句练习-文件测试操作
- shell脚本if判断文件
- [Linux] shell脚本之if判断
- shell脚本:if语句