확장자에 따라 scp 파일을 만들 수 있습니다.
scp sk@localhost:/home/sk/*.{txt,text} .
하지만 단일 확장 유형을 scp하려고 하면 실패합니다.
scp sk@localhost:/home/sk/*.{txt} .
사례 #2에서 중괄호를 제거하여 이 오류를 해결할 수 있었습니다.
파일 확장자 유형만 있으므로 중괄호 사용이 실패하는 이유가 궁금합니다.
답변1
bash를 사용한다고 가정하면,문서설명하다:
올바른 형식의 중괄호 확장에는 따옴표가 없는 여는 중괄호와 닫는 중괄호, 그리고 따옴표가 없는 하나 이상의 쉼표 또는 유효한 시퀀스 표현식이 포함되어야 합니다. 잘못 형성된 중괄호 확장은 변경되지 않습니다.
따라서 {foo}
이는 적절하게 형성된 중괄호 확장이 아닙니다.
$ bash -c 'echo {foo} {foo,bar}'
{foo} foo bar
답변2
"중괄호"라고 부르는 것을 종종 "중괄호"라고 하며 사용하는 기능을 "중괄호 확장"이라고 합니다. Bash 매뉴얼 페이지는 다음과 같이 문서화합니다.
지원 확장 중괄호 확장은 임의의 문자열을 생성할 수 있는 메커니즘입니다. 이 메커니즘은 경로 이름 확장과 유사하지만 파일 이름 생성 더 이상 존재할 필요가 없습니다. 중괄호를 확장하는 패턴은 다음과 같은 형식을 취합니다. 선택적 서문 다음에 쉼표로 구분된 일련의 문자열이 옵니다. 또는 한 쌍의 중괄호와 그 뒤에 선택적인 문자 사이의 시퀀스 표현식 추신. 프리앰블은 각 문자열에 포함된 접두사입니다. 중괄호를 사용한 다음 각 결과 문자열에 p.s를 추가합니다. 왼쪽에서 오른쪽으로 확장합니다.
중괄호 안에 단일 확장을 넣으면 나열된 형식(쉼표로 구분된 문자열 또는 중괄호 쌍 사이의 시퀀스 표현식)과 일치하지 않기 때문에 중괄호 확장이 아닙니다. 따라서 확장되지 않고 동일하게 유지됩니다.