Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 嵌套if/else的zsh脚本分析器错误_Bash_Scripting_Zsh - Fatal编程技术网

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

Bash 嵌套if/else的zsh脚本分析器错误,bash,scripting,zsh,Bash,Scripting,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 .reme

我有以下功能:

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没有多大帮助。

您在
[
之后缺少一个空格。它应该是:

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
相同。它是一个单独的命令,如
人工测试
中所述:

TEST(1)                                                                                                                          

NAME
       test - check file types and compare values

SYNOPSIS
       test EXPRESSION
       test

       [ EXPRESSION ]
       [ ]
       [ OPTION

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
}
您可以使用“zsh-xv”命令进行调试。