zoukankan      html  css  js  c++  java
  • shell脚本if判断语句报错[: too many arguments的两种原因

    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.

  • 相关阅读:
    ContentResolver.query()—>buildQueryString()
    maven基础依赖外部lib包(依赖钉钉sdk为例)
    在 Windows 中配置Maven
    windows系统下设置mtu值的方法
    dotfuscator 在混淆.Net Framework 4.0以上版本的时候报错的解决方法2
    dotfuscator 在混淆.Net Framework 4.0以上版本的时候报错的解决方法
    C# 反编译防范
    SpringBoot 集成Shiro
    windows系统下同时安装mysql5.5和8.0.11
    Eclipse安装STS(Spring Tool Suite (STS) for Eclipse)插件
  • 原文地址:https://www.cnblogs.com/huangmr0811/p/5571054.html
Copyright © 2011-2022 走看看