Bash 중괄호 확장의 코드 분할

Bash 중괄호 확장의 코드 분할

중괄호 확장을 사용할 때 bash에서 줄 바꿈과 관련된 어리석은 문제가 있습니다.

예를 들어 다음과 같은 것이 있습니다.

echo {a,b,c,d}

이제 코드를 여러 줄로 나누고 싶습니다.

echo {a,b, \
     c,d}

하지만 작동하지 않습니다. 중괄호 확장을 사용하여 코드를 분할하는 정확하고 아름다운 방법은 무엇입니까? 감사해요

답변1

댓글에 따르면, 중괄호 확장은 파일 이름 목록을 저장하는 데 사용됩니다.

이는 쉘 배열에서도 수행할 수 있으며 더 간결합니다.

files=(
    file1
    file2
    file{A..K}
    some/other/file
    some/directory/*.txt
    'file with spaces in its name'
)

두 번째 항목의 파일 이름 glob은 일치하는 모든 이름으로 확장됩니다. 마찬가지로 중괄호 확장으로 인해 세 번째 항목은 fileA, fileB, ... 로 확장됩니다.fileK

그런 다음 배열을 반복하여 파일을 복사합니다.

for file in "${files[@]}"; do
    cp "$file" some/destination
done

또는 (파일이 수천 개 미만인 경우)

cp "${files[@]}" some/destination

위의 인용문은 잘 생각되고 중요한 내용입니다. 그렇지 않으면 유효한 경로 이름을 모두 지원하지 못할 수도 있습니다.

답변2

예, 공백을 제거하면 됩니다.

$ echo {a..\
> z}
a b c d e f g h i j k l m n o p q r s t u v w x y z

답변3

추가 공백을 제거하십시오.

echo X{a,b,\
c,d}Y{e,f\
,g,h}W

이것은 ↑↑↑ 작동하고 예상되는 출력을 생성합니다.

XaYeW XaYfW XaYgW XaYhW XbYeW XbYfW XbYgW XbYhW XcYeW XcYfW XcYgW XcYhW XdYeW XdYfW XdYgW XdYhW

그러나 명시적 for루프는 (때때로) 복잡한 여러 줄 확장보다 (더 장황하긴 하지만) 읽기 쉬울 수 있습니다. 동일한 결과를 다시 출력합니다.

for x in {a..d}; do for y in {e..h}; do array+=("X${x}Y${y}W"); done; done
echo "${array[@]}"

관련 정보