더 큰 파일의 일부로 다음 코드가 있습니다( 전역 변수로 가정) ${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}"