当我打开终端时,出现以下错误:
bash: /usr/share/bash-completion/bash_completion: line 171: syntax error near unexpected token `}'
bash: /usr/share/bash-completion/bash_completion: line 171: `}'
Run Code Online (Sandbox Code Playgroud)
这是因为bash-completion文件的这个区域:
_upvar()
{
if unset -v "$1"; then # Unset & validate varname
if (( $# == 2 )); then
eval $1=\"\$2\" # Return single value
else
eval $1=\(\"\${@:2}\"\) # Return array
fi
fi
}
Run Code Online (Sandbox Code Playgroud)
为什么我在那部分出错?
我认为这可能与U&L 帖子相同的问题:您有一个fi. 该脚本在大多数情况下都很好,但别名 shell 关键字可能会导致意外问题:
$ alias fi=find
$ . /usr/share/bash-completion/bash_completion
bash: /usr/share/bash-completion/bash_completion: line 171: syntax error near unexpected token `}'
bash: /usr/share/bash-completion/bash_completion: line 171: `}'
Run Code Online (Sandbox Code Playgroud)
尽管该函数位于第 170 行左右,但它是该文件中第一个使用fi. 根据您放置此别名定义的确切位置,以及 bash 源的 bash 完成脚本的确切位置,这可能是设置别名后第一次使用fi。