나는 중괄호 확장이 여러 인수에 대해 작동할 것으로 기대합니다. 그러나 n=1의 경우 다음과 같은 결과를 얻습니다.
$ find models/nsf-projects-{7}*
models/nsf-projects-{7}.rdf
n>1의 경우 예상대로 확장이 발생합니다. 예를 들면 다음과 같습니다.
$ find models/nsf-projects-{6,7}*
find: ‘models/nsf-projects-6*’: No such file or directory
find: ‘models/nsf-projects-7*’: No such file or directory
나는 GNU 매뉴얼을 살펴보았지만 어디에도 명시적으로 언급된 >1 인수에 대한 요구 사항을 찾지 못했습니다.
질문: n>1이 실제로 교정기 확장의 요구 사항인가요? 그렇다면 왜 유용합니까?
답변1
올바른 형식의 중괄호 확장에는 따옴표가 없는 여는 중괄호와 닫는 중괄호, 그리고 따옴표가 없는 하나 이상의 쉼표 또는 유효한 시퀀스 표현식이 포함되어야 합니다. 잘못 형성된 중괄호 확장은 변경되지 않습니다.
그 이유는 다소 역사적입니다(비록 csh
다른 동작이 있는 원본에서 복사되었지만). 일부 명령은 {}
리터럴 인수(find
,parallel
, 더 복잡한 매개변수를 가진 기타 항목) 및기타 용도{}
쉘 언어로. 중괄호 확장은 문자 그대로(변수가 아닌) 작성된 경우에만 처리되므로 퇴화 확장을 지원할 인센티브가 실제로 없으며 지원하지 않는 몇 가지 이유가 있습니다.
답변2
man bash
상태(강조 추가):
적절하게 구성된 중괄호 확장에는 따옴표가 없는 열고 닫는 중괄호가 포함되어야 합니다.따옴표가 없는 쉼표가 하나 이상 있어야 합니다.또는 유효한 시퀀스 표현식. 잘못 형성된 중괄호 확장은 변경되지 않습니다.
이 글의 다섯 번째 문단이기도 합니다.지원 확장bash 매뉴얼 섹션.
{...}
동기에 대해서만 추측할 수 있지만 중괄호가 사라지지 않고 포함된 콘텐츠를 입력할 수 있도록 하기 위한 것이라고 생각됩니다 . (단지 하나의 예로서 이는 정규식 반복 연산자와 함께 작동합니다.)