当我遇到这个错误时,我正在编辑一些环境变量:
bash: /home/splacorn/.bashrc: line 115: syntax error near unexpected token `fi'
bash: /home/splacorn/.bashrc: line 115: ` fi'
这个if-statement-block导致了这个问题,但我没有看到任何意外的字符,而且它破坏了我的bashrc。我试过去除前面的空间,但它仍然无法正常工作。我该如何解决?感谢。
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
fi
. /etc/bash_completion
fi
答案 0 :(得分:0)
if
声明中不能有空体;你至少需要伪命令:
:
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
:
fi
. /etc/bash_completion
fi
错误是说解析器看到令牌fi
,它终止if
语句,然后才能看到它在关键字then
后面的命令。
答案 1 :(得分:0)
与您可能熟悉的其他编程语言不同,Shell不允许使用空块。在您的代码中,
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
#HERE
fi
您必须至少输入一个我标记为#HERE
的命令。
在这种情况下,在我看来,问题是fi
和以下行已被交换,即代码是为了阅读
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
在一般情况下,如果由于某种原因需要一个空块,那么传统的东西就是单:
,这是编写no-op命令的最短和最有效的方法。贝壳。例如
if grep -q particular_setting /etc/daemon.conf; then
:
else
sed -i -e '$a\
particular_setting=true
' /etc/daemon.conf
fi
(在便携式shell脚本中,您无法使用if ! ...
,因此 以这种方式编写do-unless-condition结构。这显然不是关注bash rc文件。)