Zsh

Zsh:導出:在此上下文中無效

  • April 9, 2022

執行此腳本時,我在此行遇到錯誤(下面的相關程式碼段):

...
_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")"

以下優秀文章可能會有所幫助:

引用自:https://unix.stackexchange.com/questions/208607