shell脚本,if判断语句报错[: too many arguments

我遇到过两种情况:

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.

最新文章

  1. Delphi之通过代码示例学习XML解析、StringReplace的用法
  2. 在浏览器中输入URL按下回车键后发生了什么
  3. LoadRunner如何监控Tomcat性能
  4. ajax请求后弹开新页面被浏览器拦截
  5. (转)排列算法 Permutation Generation
  6. opencv的初体验
  7. java @param参数注解
  8. java程序练习:x进制转Y进制
  9. 自动化利器-RPM自定义打包
  10. js斐波拉切
  11. 控制结构(4): 局部化(localization)
  12. React-Native windows环境搭建记录
  13. Python实战二
  14. NowCoder Wannafly 27E 黄魔法师 构造
  15. Navicat Premium 12破解方法
  16. HDU 6114 Chess【逆元+组合数】(组合数模板题)
  17. javascript实现一行文字随不同设备自适应改变字体大小至字数完全展示
  18. [PHP] 深入理解PHP内核:变量及数据类型
  19. c++ socket相关
  20. cocos2dx lua invalid 'cobj' in function 'lua_cocos2dx‘ 躺坑

热门文章

  1. js字符串常用函数
  2. Python学习笔记:读取Excel的xlrd模块
  3. .NetCore 使用VSCode多项目调试
  4. Node.js的事件轮询Event Loop原理
  5. spring boot 启动报 java.lang.NoClassDefFoundError: ch/qos/logback/core/spi/LifeCycle 错误
  6. Eclipse MAT和jvisualvm分析内存溢出
  7. SqlServer:SqlServer(存储过程动态表查询(取消返回值),事务处理,批量还原sqlserver备份,强制删除被占用的数据库)
  8. C#反射动态创建实例并调用方法
  9. cryptopp 加密库的安装
  10. 【ABAP系列】SAP ABAP 带有参数的AMDP的创建