在没有子 shell 的情况下循环使用换行符变量

在没有子 shell 的情况下循环使用换行符变量

我正在尝试以 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

相关内容