while 루프에서 이 문서 변수를 사용하십시오.

while 루프에서 이 문서 변수를 사용하십시오.

루프에서 Here Document 변수를 사용하는 데 문제가 있습니다. 왜냐면 이게 효과가 있거든

while IFS= read -r line; do
  echo "(${line})"
done <<EOF
one
two
three
EOF

그러나 이것은 그렇지 않습니다

foo=<<EOF
one
two
three
EOF

while IFS= read -r line; do
  echo "(${line})"
done <<<"$foo"

이제 저는 bash 스크립팅이 처음입니다. 머리 위에 물음표가 있는 것 외에도 두 번째 구문(여기 스크립트 상단에 설명되어 있음)을 유지하고 어떻게든 작동하게 만드는 방법을 알고 싶습니다.

당신의 도움을 주셔서 감사합니다.

답변1

foo이렇게 하면 변수가 구분된 문서의 내용으로 설정되지 않습니다 .

foo=<<EOF
one
two
three
EOF

리디렉션을 사용하여 빈 문자열에 대한 변수 할당입니다. 이렇게 하면 무슨 일이 일어나고 있는지 더 명확해질 수 있습니다.

foo=""  <<EOF
one
two
three
EOF

하지만 실제로는 heredoc이 필요하지 않습니다. 그냥 해:

foo="one
two
three"

답변2

분명히 인라인 문서 변수를 원하고 이를 줄로 분할합니다. 다음을 수행할 수 있습니다.

lines=$(cat <<EOF
one two
three
four
EOF
)

IFS=$'\n'     # split on non-empty lines
set -o noglob # disable globbing as we only want the split part.

# use split+glob (leave ${lines} unquoted):
for line in ${lines}; do
   echo "${line}"
done

온라인으로 분할되지 않도록 IFS를 어떻게 설정했는지 확인하세요. spc/tab/newline으로 구분된 단어는 기본적으로 분할됩니다.

관련 정보