인용된 항목이 있는 For 루프

인용된 항목이 있는 For 루프

인용된 헤더 목록을 반복하는 for 루프:

for h in "header" "header 2"; do
    echo $h
done

반품

header
header 2

변수에 할당하는 등 헤더를 정리하기 위해 다른 곳에서 헤더를 참조하고 싶습니다.

headers='"header" "header 2"'
for h in $headers; do
    echo $h
done

하지만 이것은 반환

"header"
"header
2"

그래야만합니다.

이 문제를 해결할 방법이 있나요? 그것은 비슷하다이 게시물공백이 있는 파일 목록이 포함되어 있지만 파일을 다루지는 않습니다. 항목이 많기 때문에 한 줄에 유지하고 싶습니다.

답변1

또 다른 방법은 필드 구분 변수를 변경하는 것입니다. 예를 들면 다음과 같습니다.

headers="header,header 2"
IFS=,
for h in $headers; do
        echo $h
done

노트:기본 IFS 값이 필요한 다른 루프가 있는 경우 먼저 IFS 값을 임시 변수에 저장할 수 있습니다.

자세한 내용을 확인 man bash하고 검색해 보세요 IFS.

답변2

이 문제를 해결하는 방법은 따옴표 대신 쉼표(또는 기타 등등)를 사용하고 csv 스타일을 사용하는 것임을 깨달았습니다. 이제 줄 구분으로의 간단한 변환이 이루어졌습니다.

headers="header,header 2"
headers=$(echo $headers | sed 's/,/\n/g')
printf "$headers\n" | while read h; do
    echo $h
done

그러나 더 우아한 솔루션이 있으면 공유해 주세요.

관련 정보