如何解决 "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。
我正在尝试将名为 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。