【问题标题】:zsh script parser error for nested if/else嵌套 if/else 的 zsh 脚本解析器错误
【发布时间】:2016-10-13 01:01:43
【问题描述】:

我有以下不起眼的 zsh 功能:

function remember()
{
  if [ "$1" != "" ]
  then
    if[ "$1" != "clean" ]
    then
      echo "Why";
      #echo $1 >> {~/.remember_info};
    else
      rm -r ~/.remember_info;
      touch ~/.remember_info;
    fi
  else
    cat .remember_info;
  fi
}

当我尝试获取它时,我得到:

'echo' 附近的解析错误(echo 是带有 echo "Why" 的行;)

这个错误是非描述性的,我假设它与循环逻辑的一部分有关(因为无论我给出什么指令,它都会出错)。

有没有办法“调试”这种事情? zsh -n 没有多大帮助(完全)

【问题讨论】:

  • 可以使用“zsh -xv”命令调试。

标签: bash scripting zsh


【解决方案1】:

clean 比较时,您忘记了if[ 之间的空格。

不过,在这种情况下,您的函数可以通过首先处理 = 的情况来简化。

function remember()
{
  if [ "$1" = "" ]; then
    cat ~/.remember_info
  elif [ "$1" = clean ]; then
    rm -r ~/.remember_info
    touch ~/.remember_info
  else
    echo "$1" >> ~/.remember_info;
  fi
}

或者,使用case 语句。

remember () {
  f=~/.remember_info
  case $1 of
    "")
      cat "$f"
      ;;
    clean)
      rm -r "$f"
      touch "$f"
      ;;
    *)
      print "$1" >> "$f"
      ;;
  esac
}

【讨论】:

    【解决方案2】:

    [ 后面缺少一个空格。应该是:

    function remember()
    {
        if [ "$1" != "" ]
        then
        if [ "$1" != "clean" ]
        then
            echo "Why";
            #echo $1 >> {~/.remember_info};
        else
            rm -r ~/.remember_info;
            touch ~/.remember_info;
        fi
        else
        cat .remember_info;
        fi
    }
    

    [test 相同。它是一个单独的命令,在man test 中描述:

    TEST(1)                                                                                                                          
    
    NAME
           test - check file types and compare values
    
    SYNOPSIS
           test EXPRESSION
           test
    
           [ EXPRESSION ]
           [ ]
           [ OPTION
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多