【问题标题】:KornShell Boolean Conditional LogicKornShell 布尔条件逻辑
【发布时间】:2011-06-17 00:11:25
【问题描述】:

我对我正在编写的这个 KornShell (ksh) 脚本有点困惑,主要是布尔值和条件。

所以我脚本的第一部分将catmewcme 都设置为truefalse。这部分工作正常,因为我已经尝试echoing 他们并且他们产生了预期的结果。后来,我有这个代码:

if [[ $catme ]] ; then
    some commands
fi

我用wcme 重复这一点。然而,出乎意料的是,不管wcmecatme是什么,我的if语句中的命令都被执行了。

这是语法错误吗?我试过[[ $catme -eq true ]],但这似乎也不起作用。有人能指出我正确的方向吗?

【问题讨论】:

    标签: shell unix scripting ksh


    【解决方案1】:

    你也可以试试试错法:

    if [[ true ]]; then echo +true; else echo -false; fi
    +true
    if [[ false ]]; then echo +true; else echo -false; fi
    +true
    if [[ 0 ]]; then echo +true; else echo -false; fi
    +true
    if [[ -1 ]]; then echo +true; else echo -false; fi
    +true
    if (( -1 )); then echo +true; else echo -false; fi
    +true
    if (( 0 )); then echo +true; else echo -false; fi
    -false
    if (( 1 )); then echo +true; else echo -false; fi
    +true
    if [[ true == false ]]; then echo +true; else echo -false; fi
    -false
    if [[ true == true ]]; then echo +true; else echo -false; fi
    +true
    if true; then echo +true; else echo -false; fi
    +true
    if false; then echo +true; else echo -false; fi
    -false
    

    【讨论】:

      【解决方案2】:

      改用[[ $catme == true ]]

      或者更好的是,gahooa的回答还不错。

      【讨论】:

        【解决方案3】:

        test[ 是同一个东西。您需要从 if 语句中删除 test 命令,所以它看起来像这样:

        if $catme; then
            some commands
        fi
        

        输入 man test 以获取更多信息。

        例如:

        $ v=true  
        $ $v
        $ if $v; then
        >   echo "PRINTED"
        > fi
        PRINTED
        
        $ v=false
        $ if $v; then
        >   echo "PRINTED"
        > fi
        $ 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-07-11
          • 1970-01-01
          • 1970-01-01
          • 2015-04-18
          • 2011-08-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多