linux 意外标记

iszxjhcz  于 2022-11-22  发布在  Linux
关注(0)|答案(1)|浏览(145)

我对Linux系统有点陌生,所以我希望能得到任何帮助。也许我忽略了一些简单的东西。我喜欢循环通过一些变量,但在执行时我总是得到这个错误

line 8: syntax error near unexpected token `20_0_200-75-20_0_200.Ni10Nj11'
 line 8: `20_0_200-75-20_0_200.Ni10Nj11 20_0_200-80-20_0_200.Ni00Nj10 20_0_200-80-20_0_200.Ni11Nj01'

这是一个被卡住的循环。

#!/bin/sh
#
#
#
for s1 in new new1
do
for s2 in 20_0_200-75-20_0_200.Ni10Nj10 20_0_200-80-20_0_200.Ni00Nj00 20_0_200-80-20_0_200.Ni10Nj11
20_0_200-75-20_0_200.Ni10Nj11 20_0_200-80-20_0_200.Ni00Nj10 20_0_200-80-20_0_200.Ni11Nj01
20_0_200-75-20_0_200.Ni11Nj10 20_0_200-80-20_0_200.Ni10Nj10
do

我使用过类似的文件,它们都工作得很好。(以及改变文件的模式)。

li9yvcax

li9yvcax1#

如此处所示,for s2行被分成3行,使字符串20_0_200-75-20_0_200.Ni10Nj11(来自错误消息)单独位于一行中,并且由于解析器正在查找do(在for s2 ...行之后),因此您会得到错误消息re:***(即,=)。
有几个选择...
在前两行末尾添加一个连续字符(\),例如:

for s2 in 20_0_200-75-20_0_200.Ni10Nj10 20_0_200-80-20_0_200.Ni00Nj00 20_0_200-80-20_0_200.Ni10Nj11 \
20_0_200-75-20_0_200.Ni10Nj11 20_0_200-80-20_0_200.Ni00Nj10 20_0_200-80-20_0_200.Ni11Nj01 \
20_0_200-75-20_0_200.Ni11Nj10 20_0_200-80-20_0_200.Ni10Nj10
do

或者,您可以将所有这些字符串/名称拉到主行中,例如:

for s2 in 20_0_200-75-20_0_200.Ni10Nj10 20_0_200-80-20_0_200.Ni00Nj00 20_0_200-80-20_0_200.Ni10Nj11 20_0_200-75-20_0_200.Ni10Nj11 20_0_200-80-20_0_200.Ni00Nj10 20_0_200-80-20_0_200.Ni11Nj01 20_0_200-75-20_0_200.Ni11Nj10 20_0_200-80-20_0_200.Ni10Nj10
do

如果你遇到其他的问题,考虑剪切粘贴你的代码(和shebang沿着)到shellcheck.net;这在解决常见的编码/语法问题方面做得很好。
另一个可能需要检查的问题是...您已经标记了问题bash,但您的shebang(/bin/sh)表明您可能没有使用bash(即,shbash不同);虽然您的系统可能已经将/bin/sh重新定义为bash的符号链接或副本,但这并不常见;您将需要验证所使用的shell,因为这将决定您在将来编写的代码中某些命令的语法。

相关问题