web-dev-qa-db-ja.com

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
...

何故ですか?私は this ticket を見つけましたが、その構文エラーはありません。

GitHubスレッド(例 here )とメーリングリスト(例 here )で同じ問題の報告を見つけました

Zshでは、 Command Substitution 結果が実行されました。二重引用符で囲まれていない場合、単語の分割が行われました。したがって、コマンド置換結果に空白、タブ、または改行が含まれている場合、エクスポートコマンドは次のように分割されます。

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

コマンド置換を機能させるには、二重引用符で囲むか、より安全な構文を使用する必要があります。

PATH=$_NEW_PATH; export PATH

あるいは:

PATH=$_NEW_PATH export PATH
8
cuonglm

POSIXに準拠するには、ここで二重引用符が必要です。以下はそれを修正しました。

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

以下の優れた記事が役立つかもしれません: