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 執行緒(例如這裡)和郵件列表(例如這裡)中發現了相同問題的報告
在 zsh 中,如果命令替換結果沒有用雙引號括起來,則執行分詞。因此,如果您的命令替換結果包含任何空格、製表符或換行符,則導出命令將被分成幾部分:
$ export a=$(echo 1 -2) export: not valid in this context: -2
您需要雙引號命令替換以使其工作,或者使用更安全的語法:
PATH=$_NEW_PATH; export PATH
甚至:
PATH=$_NEW_PATH export PATH
我想我明白了,為了符合 POSIX 標準,我在這裡需要雙引號。以下修復了它。
export CONDA_ENV_PATH="$(get_dirname "$_THIS_DIR")"
以下優秀文章可能會有所幫助: