![在没有子 shell 的情况下循环使用换行符变量](https://linux22.com/image/207235/%E5%9C%A8%E6%B2%A1%E6%9C%89%E5%AD%90%20shell%20%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E5%BE%AA%E7%8E%AF%E4%BD%BF%E7%94%A8%E6%8D%A2%E8%A1%8C%E7%AC%A6%E5%8F%98%E9%87%8F.png)
我正在尝试以 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