아마 당신도 그걸 알고 있을 거예요포크 폭탄:
:(){ :|:&};: #WARNING: harmful code
구문 분석을 위해 여는 중괄호 뒤에 공백을 포함하는 것이 왜 필요한지 궁금합니다.
답변1
{}
{ list; }
중괄호 사이에 명령 목록을 배치하면 목록이 현재 쉘 컨텍스트에서 실행됩니다. 하위 쉘이 생성되지 않습니다. 다음 목록에는 세미콜론(또는 개행)이 필요합니다.
서브쉘 생성 외에도 역사적인 이유로 인해 이 두 구성 사이에는 미묘한 차이가 있습니다. 중괄호는 예약어이므로 공백이나 다른 쉘 메타 문자로 목록과 구분되어야 합니다. 괄호는 연산자이며 공백으로 목록과 구분되지 않더라도 셸에서 별도의 토큰으로 인식됩니다.
//원천
답변2
@rush가 여기에 잘못된 답변을 제공할 수 있다고 생각합니다. 포크 폭탄은 다음을 정의합니다.기능라고 불리는 " :
". 중괄호 안의 코드는 함수가 마지막 " :
"에 의해 호출될 때까지 실행되지 않습니다. 따라서 중괄호는 다음과 같습니다.명령 그룹화중괄호는 다음과 같습니다.기능 본체구문론적으로는 동일하지만 의미가 다릅니다.
같은 것에서문서@rush가 인용한 것처럼:
역사적 이유로 가장 일반적인 사용법에서 함수 본문을 둘러싸는 중괄호는 공백이나 개행 문자로 본문과 구분되어야 합니다. 이는 중괄호가 예약어이고 공백이나 다른 쉘 메타 문자로 명령 목록과 구분되는 경우에만 그렇게 인식되기 때문입니다. 또한 중괄호를 사용할 때 목록은 세미콜론, '&' 또는 개행 문자로 끝나야 합니다.