다중 문 라인을 반복할 때 예기치 않은 완료 표시 근처에 구문 오류가 있습니다.

다중 문 라인을 반복할 때 예기치 않은 완료 표시 근처에 구문 오류가 있습니다.

더 큰 파일의 일부로 다음 코드가 있습니다( 전역 변수로 가정) ${tools_urls}.${tempFolder}

download_tools()
{
    for i in ${tools_urls}; do
        wget --no-check-certificate --directory-prefix=${tempFolder} ${i} || { echo "download failed" ; exit 3}
    done
}

스크립트를 실행하면 다음 오류가 발생합니다.

syntax error near unexpected token 'done'

그러나 || { echo "download failed" ; exit 3}루프의 일부를 제거하면 작동합니다.

왜 그럴까요? 내 코드에 어떤 문제가 있는지 알 수 없고 한 줄에 여러 문이 포함된 유사한 예를 찾을 수 없습니다.

답변1

복합 명령중괄호가 있는 각 명령 뒤에는 세미콜론이 와야 합니다.

{ cmd1; cmd2; cmd3; }

따라서 다음과 같이 변경하십시오.

... || { echo "download failed" ; exit 3; }

마지막 명령 뒤에는 공백이 필요합니다.

중괄호는 다음과 같습니다.예약어이므로 다음과 일치해야 합니다.목록(명령)은 공백이나 기타 쉘 메타 문자로 구성됩니다.


또한 변수를 인용해야 합니다.

wget --no-check-certificate --directory-prefix="${tempFolder}" "${i}"

관련 정보