BASH Syntax error near unexpected token 'done'

前端 未结 12 895
轮回少年
轮回少年 2020-12-01 05:52

Any idea of what the problem could be?

My code is:

#!/bin/bash
while :
do
echo \"Press [CTRL+C] to stop..\"
sleep 1
done

Saved it a

12条回答
  •  执念已碎
    2020-12-01 06:21

    Had similar problems just now and these are two separate instances and solutions that worked for me:

    Case 1. Basically, had a space after the last command within my newline-separated for-loop, eg. (imagining that | here represents the carat in a text editor showing where you are writing), this is what I saw when clicking around the end of the line of the last command in the loop:

    for f in $pathToFiles
    do
       $stuff |
    done
    

    Notice the space before before the carat (so far as I know, this is something cat has no option do display visually (one way you could test is with something like od -bc yourscript.sh)). Changing the code to

    for f in $pathToFiles
    do
       $stuff| <--- notice the carat shows no ending space before the newline
    done
    

    fixed the problem.

    Case 2. Was using a pseudo try-catch block for the for-loop (see https://stackoverflow.com/a/22010339/8236733) like

    {
    for f in $pathToFiles
    do
       { $stuff } || { echo "Failed to complete stuff"; exit 255; }
    done
    } || { echo "Failed to complete loop"; exit 255; }
    

    and apparently bash did not like the nested {}s. Changing to

    {
    for f in $pathToFiles
    do
       $stuff
    done
    } || { echo "Failed to complete loop"; exit 255; }
    

    fixed the problem in this case. If anyone can further explain either of these cases, please let me know more about them in the comments.

提交回复
热议问题