【问题标题】:for loop shell script syntax error: unexpected word (expecting "do")for 循环 shell 脚本语法错误:意外单词(期待“do”)
【发布时间】:2017-04-05 10:10:41
【问题描述】:

for 循环 shell 脚本语法错误:意外单词(应为“do”)

#!/bin/sh PRO="a t d e k " for file in $PRO do #this will be line 6 echo $file done

输出:第 6 行:语法错误:意外单词(期待“do”)

【问题讨论】:

  • 您的文件中可能有 DOS 行结尾,因此 shell 看到的是 do\r 而不是 do
  • 如何验证?
  • @chepner,是的 .. 当我在 vi 编辑器中打开它时发现了一个 ^M。它帮助我解决了它。后来参考linuxcommand.org/man_pages/dos2unix1.html 使用了dos2unix命令
  • 顺便说一句,在这种情况下,为什么要将循环标记放在字符串变量中? for file in a t d e k; do 似乎一点也不难读或易于维护,并且具有明显的优势,即您也可以在其中包含带有元字符等的文件名(当然,只需正确引用它们;如果他们必须这样做,您就不能轻易做到在一个字符串中)。

标签: sh


【解决方案1】:

当我在 vi 编辑器中打开它时发现了一个 ^M。它帮助我解决了它。

所以当我在 vi 编辑器中打开它时是这样的

for file in $PRO
   do^M                           
       echo $file
   done^M

后来参考computerhope.com/unix/dos2unix.htm使用了dos2unix命令

【讨论】:

    猜你喜欢
    • 2019-03-27
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 2010-12-19
    • 2017-09-12
    • 1970-01-01
    相关资源
    最近更新 更多