2016-10-12 6 views
2

場合:私はそれを調達しようとするとの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 
} 

私が取得: `エコー」近く

パースエラーを(エコーがあること

エラーは非常に説明的ではありません。ループのロジックの一部に関連していると思います。

この種のものを「デバッグする」方法はありますか? zsh -nはあまり役に立ちません

+0

「zsh -xv」コマンドを使用してデバッグすることができます。 –

答えて

5

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 
関連する問題