답변:
{}
{ list; }
중괄호 사이에 명령 목록을 배치하면 현재 쉘 컨텍스트에서 목록이 실행됩니다. 서브 쉘이 작성되지 않습니다. 세미콜론 (또는 줄 바꿈) 다음 목록이 필요합니다.
서브 쉘을 작성하는 것 외에도, 역사적 이유 때문에이 두 구조 사이에는 미묘한 차이가 있습니다. 중괄호는 예약어이므로 공백 또는 다른 쉘 메타 문자로 목록에서 분리해야합니다. 괄호는 연산자이며 공백으로 목록에서 분리되지 않더라도 셸에서 별도의 토큰으로 인식됩니다.
// 소스
@rush가 오해의 소지가 있다면 여기에 올바른 답변을 줄 수 있다고 생각합니다. 포크 폭탄은 " " 라는 함수를 정의합니다 :
. 중괄호 안의 코드는 함수가 최종 " :
"에 의해 호출 될 때까지 실행되지 않습니다 . 따라서 명령 그룹화로 중괄호와 함수 본문 으로 중괄호 는 구문 적으로 동일하지만 의미가 다릅니다. @rush 인용
과 동일한 문서 에서 :
역사적 이유로 가장 일반적인 사용법에서 함수 본문을 둘러싼 중괄호는 공백 또는 개행 문자로 본문과 분리해야합니다. 중괄호는 예약어이며 공백이나 다른 쉘 메타 문자로 명령 목록에서 분리 될 때만 인식되기 때문입니다. 또한 중괄호를 사용할 때 목록은 세미콜론, '&'또는 줄 바꿈으로 끝나야합니다.
function_body
A는 compound_command
(플러스 옵션 redirect_list
). 공백은 {
특수 문자가 아닌 예약어 이므로 필요 합니다.
brace_group
함수의 일부와 그렇지 않은 경우 다르게 동작합니다. 나는 후자의 경우를 설명하기 위해 명령 그룹화 를 사용 했으며 이것이 서두의 링크에 설명되어 있습니다.
{
연산자가 아니라 예약어이며, 단어를 구별하기 위해 다른 단어와 분리해야합니다.