!["cat {foo}"는 foo를 출력하지 않지만 "cat {foo,bar}"는 왜 출력됩니까?](https://linux55.com/image/133652/%22cat%20%7Bfoo%7D%22%EB%8A%94%20foo%EB%A5%BC%20%EC%B6%9C%EB%A0%A5%ED%95%98%EC%A7%80%20%EC%95%8A%EC%A7%80%EB%A7%8C%20%22cat%20%7Bfoo%2Cbar%7D%22%EB%8A%94%20%EC%99%9C%20%EC%B6%9C%EB%A0%A5%EB%90%A9%EB%8B%88%EA%B9%8C%3F.png)
하위 폴더에 있는 텍스트 파일을 연결하려고 시도 중입니다.
cat ./{mainfolder1,mainfolder2,mainfolder3}/{subfolder1}/book.txt > out$var
그러나 이것은 아무것도 반환하지 않습니다. 따라서 존재하지 않는 "subfolder2"를 추가해 보십시오.
cat ./{mainfolder1,mainfolder2,mainfolder3}/{subfolder1,subfolder2}/book.txt > out$var
이번에는 작동했고 파일이 성공적으로 연결되었습니다. 왜 이런 일이 발생합니까?
답변1
정의에 따라 GNU Bash의 중괄호 확장에는 시퀀스 표현식이나 쉼표로 구분된 값 목록이 필요합니다.
중괄호를 확장하는 패턴은 선택적 서문, 그 뒤에 일련의 쉼표로 구분된 문자열 또는 한 쌍의 중괄호 사이의 시퀀스 표현식, 그 뒤에 선택적 포스트스크립트의 형태를 취합니다.
당신은 할 수설명서를 읽어보세요더 알아보기.
몇 가지 간단한 예:
echo {subfolder1}
{subfolder1}
echo {subfolder1,subfolder2}
subfolder1 subfolder2
echo subfolder{1}
subfolder{1}
echo subfolder{1..2}
subfolder1 subfolder2
답변2
{subfolder1}
{subfolder1}
다른 선택지가 없기 때문에 로 평가됩니다 . 대신 사용하십시오 subfolder1
.
답변3
중괄호는 {abc,def}와 같이 쉼표로 구분된 문자열이나 {a..e}와 같은 범위가 그 사이에 지정된 경우에만 확장됩니다.
귀하의 경우에는 이렇게 할 필요가 없으므로 중괄호로 묶지 않고 subfolder1 을 작성할 수 있습니다.
cat ./{mainfolder1,mainfolder2,mainfolder3}/subfolder1/book.txt > out$var