Zsh:エクスポート:このコンテキストでは無効です。

Zsh:エクスポート:このコンテキストでは無効です。

走っている間このスクリプト、エラーが発生しましたこの行(関連スニペットは次のとおりです):

...
_NEW_PATH=$("$_THIS_DIR/conda" ..activate "$@")
if (( $? == 0 )); then
    export PATH=$_NEW_PATH
    # If the string contains / it's a path
    if [[ "$@" == */* ]]; then
        export CONDA_DEFAULT_ENV=$(get_abs_filename "$@")
    else
        export CONDA_DEFAULT_ENV="$@"
    fi

    # ==== The next line returns an error 
    # ==== with the message: "export: not valid in this context /Users/avazquez/anaconda3"
    export CONDA_ENV_PATH=$(get_dirname $_THIS_DIR)

    if (( $("$_THIS_DIR/conda" ..changeps1) ));  then
            CONDA_OLD_PS1="$PS1"
            PS1="($CONDA_DEFAULT_ENV)$PS1"
    fi
else
    return $?
fi
...

なぜそんなことですか?私が見つけたこのチケットしかし、対応する構文エラーはありません。

GitHubスレッドで同じ問題に関するレポートが見つかりました(例:ここ)とメーリングリスト(例:ここ)

答え1

zshではコマンドの置き換え二重引用符で囲まないと、結果に対してトークン化が行われます。したがって、コマンド置換の結果にスペース、タブ、または改行が含まれている場合、エクスポートコマンドはさまざまな部分に分割されます。

$ export a=$(echo 1 -2)
export: not valid in this context: -2

機能するには、二重引用符コマンドの置き換えが必要か、より安全な構文を使用してください。

PATH=$_NEW_PATH; export PATH

でも:

PATH=$_NEW_PATH export PATH

答え2

POSIXの規則に従うには、ここで二重引用符を使用する必要があることを理解しているようです。以下はこれを修正します。

export CONDA_ENV_PATH="$(get_dirname "$_THIS_DIR")"

次の素晴らしい記事が役に立ちます。

答え3

zshrcでエイリアスとしてエクスポートする変数名を追加するのを忘れたときに、これが発生しました。

間違った

export /Library/Java/JavaVirtualMachines/ibm-semeru-openjdk-17.jdk/Contents/Home

いいね:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/ibm-semeru-openjdk-17.jdk/Contents/Home

関連情報