我正在尝试配置一个名为ZeroTier的虚拟专用网,以便在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:语法错误,接近意外标记“那么”
我在;之前和之后使用了当时的位置和空格,然后放在分号上,将$z上的单引号和其他一些东西更改为单引号。我迷路了,也不明白为什么这个脚本不起作用。
发布于 2019-08-16 13:25:19
此错误是由于脚本中的\出现在&&之后造成的。
反斜杠转义下一个字符,使其不被shell解释。如果下一个字符是换行符,则shell将不会将换行符解释为命令的结尾。它有效地允许命令跨越多行。还请注意,在以这种方式拆分的行中,没有任何东西(甚至不是注释或单个空格)可能会跟随\。
例如,ls; \ if true; then echo "Hi"; fi;也会产生与您的错误相同的错误,但是如果您将相同的错误按下面的方式放入脚本中,则不会产生错误。
ls; \
if true; then echo "Hi"; fi;正如@glenn-jackman下面的评论所指出的,bash对then有问题的原因是没有前面的if,而是有一个名为" if"的命令。
此外,在脚本中,您不需要在\之后使用&&。在明显存在未终止命令(&&, ||, |, &, ;)的一些上下文中,换行符被忽略。有关更多信息,请参见here。
https://stackoverflow.com/questions/57525143
复制相似问题