如何解决 "unexpected token 'then'" 的语法错误?

How to resolve a syntax error of "unexpected token 'then'"?

我正在尝试将名为 ZeroTier 的 VPN 配置到 Raspberry Pi 上的 运行。我用于安装的 Bash 脚本是:

curl -s 'https://pgp.mit.edu/pks/lookup?op=get&search=0x1657198823E52A61' | gpg --import && \ if z=$(curl -s 'https://install.zerotier.com/' | gpg); then echo "$z" | sudo bash; fi

这让我:

-bash: syntax error near unexpected token 'then'

我研究了 then 的位置和 ) 前后 ; 之间的空格,将 then 放在分号上,将 [=14 上的 the 更改为单引号=] 和其他一些东西。我迷路了,不明白为什么这个脚本不起作用。

此错误是由于脚本中 && 之后出现的 \

反斜杠转义下一个字符,使其不被 shell 解释。如果下一个字符是换行符,则换行符不会被 shell 解释为命令结束。它有效地允许一个命令跨越多行。另请注意,以这种方式分开的行上的 \ 后面不得跟任何内容(甚至是评论或单个 space)。

例如,ls; \ if true; then echo "Hi"; fi; 也会产生与您的错误相同的错误,但如果您将其放入如下脚本中,则不会产生错误。

ls; \
if true; then echo "Hi"; fi;

正如下面来自 @glenn-jackman 的评论所指出的,bash 与 then 有问题的原因是没有前面的 if,取而代之的是一个名为 " if".

的命令

此外,在脚本中 && 之后不需要 \。在一些明显存在未终止命令 (&&, ||, |, &, ;) 的上下文中,换行符会被忽略。有关更多信息,请参阅 here