서브쉘 없이 개행 변수 반복

서브쉘 없이 개행 변수 반복

POSIX 호환 방식으로 개행 문자가 포함된 변수를 반복하려고 합니다.

다음은 작동합니다:

echo "$REQUIRE_PURPOSE" | while IFS= read -r line ; do
  echo "$line"
done

그러나 파이프는 또 다른 껍질을 만듭니다.

그런 다음 다음을 시도합니다.

OLDIFS="$IFS"
IFS='
'
for line in "$REQUIRE_PURPOSE"; do
  echo "$line"
done
IFS="$OLDIFS"

하지만 내용만 인쇄됩니다."$REQUIRE_PURPOSE"

나는 또한 다음을 시도했습니다.

while IFS= read -r line ; do
  echo "$line"
done <<< "$REQUIRE_PURPOSE"

하지만 여기서도 작동하지 않습니다.

예:

echo "$REQUIRE_PURPOSE"
echo "---"
while IFS= read -r line ; do echo "$line"; done <<< "$REQUIRE_PURPOSE"

생성하다:

uuu
iii
Digital Signature
---
uuuniiinDigital Signature

또는

00000000  75 75 75 0a 69 69 69 0a  44 69 67 69 74 61 6c 20  |uuu.iii.Digital |
00000010  53 69 67 6e 61 74 75 72  65 0a 2d 2d 2d 0a 31 20  |Signature.---.1 |
00000020  75 75 75 6e 69 69 69 6e  44 69 67 69 74 61 6c 20  |uuuniiinDigital |
00000030  53 69 67 6e 61 74 75 72  65 0a 75 75 75 0a 69 69  |Signature.uuu.ii|
00000040  69 0a 44 69 67 69 74 61  6c 20 53 69 67 6e 61 74  |i.Digital Signat|
00000050  75 72 65 0a                                       |ure.|
00000054

어떤 아이디어가 있나요?

답변1

필요한 옵션 read은 입력을 배열로 -a구문 분석합니다 .IFS

read -a lines <<<"$REQUIRE_PURPOSE"
for i in "${lines[@]}"
do
    echo "$i"
done

관련 정보