【问题标题】:Bash For Loop Syntax ErrorBash For 循环语法错误
【发布时间】:2013-06-08 07:23:43
【问题描述】:

我正在尝试执行一个简单的 for 循环,但它一直告诉我 do 附近有语法错误。我试图在网上找到一些答案,但似乎没有什么能完全回答我的问题。

for 循环就是这样。它要做的就是找到两个文件夹之间的差异:

#!/bin/bash
for word in $LIST; do
 diff DIR1/config $word/config
done
exit

语法错误即将发生。它说“意外标记'do'附近的语法错误”。 $LIST 由调用它的程序在此脚本之外设置。

有人知道这里会发生什么吗?

【问题讨论】:

  • $LIST 扩展为什么?另外,你能给出确切的错误吗?
  • $LIST 扩展为如下列表:DIR2 DIR3 DIR4
  • 这不会导致语法错误,但您需要在DIR1(假设它是一个变量)和word 前面加上一个美元符号来获取它们的值:diff "$DIR1/config" "$word/config"
  • 另外,语法错误是: Syntax error near unexpected token 'do'
  • 这不是代码,是完整的代码,只是代码。我们需要更多信息来调试它。

标签: bash for-loop syntax-error


【解决方案1】:

这对于bash 来说当然是有效的语法,所以我会检查文件中是否有特殊字符,例如行尾的 CR/LF。

假设您使用的是 UNIXy 系统,od -xcb scriptname.sh 应该会显示给您。

此外,您可能还想使用$word 而不仅仅是word,因为您需要评估变量。

要检查的另一件事是您 实际上是在 bash 下运行它,而不是在一些“较小”的 shell 下运行。在脚本中放置set -x 以进行调试通常很方便,因为这会在执行之前输出行(使用set +x 关闭此功能)。

要检查的最后一件事是 LIST 实际上是通过在 for 循环之前执行 echo "[$LIST]" 设置的。

【讨论】:

  • 关注LIST 的值是如何设置的,因为这似乎是导致错误的原因。
  • 实际上,chepner,我以前见过这种行尾不正确的事情,例如看似有效的语法出现“神秘”错误,以及无法从 shebang 行运行 shell。跨度>
  • LIST 的值在调用此特定脚本的自动化程序中设置。另外,我试过那个命令,似乎没有 CR/LF 潜入程序
  • @paxdiablo 我同意;我只是没有很好地表达那个评论。我假设 LIST 的值是在文件中设置的,并且它的值似乎是导致问题的回车的可能来源。
猜你喜欢
  • 2015-04-17
  • 2017-04-17
  • 2018-02-23
  • 2018-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多