为什么要在.profile脚本中转义eval的第一个字符?

时间:2019-01-26 10:21:21

标签: bash shell anaconda

我已经在Mac上安装了anaconda,我注意到它将以下内容附加到我的.profile中:

# added by Anaconda3 5.3.1 installer
# >>> conda init >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$(CONDA_REPORT_ERRORS=false '/anaconda3/bin/conda' shell.bash hook 2> /dev/null)"
if [ $? -eq 0 ]; then
    \eval "$__conda_setup"
else
    if [ -f "/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/anaconda3/etc/profile.d/conda.sh"
        CONDA_CHANGEPS1=false conda activate base
    else
        \export PATH="/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda init <<<

我对“ \ eval”和“ \ export”行的转义感到困惑。这样做的目的是什么?我怀疑这与可移植性有关,但我从未见过。

有人可以解释它的目的吗?

1 个答案:

答案 0 :(得分:2)

引用它是为了在其他命令中使用别名。请参见以下示例:

[STEP 101] $ alias foo='echo hello world'
[STEP 102] $ foo
hello world
[STEP 103] $ \foo
bash: foo: command not found
[STEP 104] $

根据bash manaul:

  

检查每个简单命令的第一个单词(如果未引用),以查看其是否具有别名。如果是这样,该词将被别名的文本替换。