嵌套if/else的zsh脚本解析器错误

Geo*_*e H 2 bash scripting zsh

我有以下简单的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
}
Run Code Online (Sandbox Code Playgroud)

当我尝试采购它时,我得到:

`echo'附近的解析错误(回声是回声"为什么"的行;)

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

有没有办法"调试"这种东西?zsh -n没有多大帮助(根本)

che*_*ner 5

你忘记了比较之间if和之间的空间.[clean

但是,通过=首先处理案例可以使您的功能变得更简单.

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
}
Run Code Online (Sandbox Code Playgroud)

或者,使用case声明.

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