file1
我的 ESX 主机上有一个名为的大文件。我awk
在该文件上运行一些命令,并将有用的数据块提取到一个变量中,该变量在 busybox shell 上运行良好。
现在我想info
逐行读取该变量 ( ),更改某些内容并写入不同的文件。
info=$(awk '/pat1/{flag=1}/pat2/{flag=0}flag' file1) -> works fine
while IFS= read -r line; do
printf '%s\n' "$line"
done <<< "$info"
但 while 循环不起作用。收到错误“意外重定向”。我还尝试了`done <<“$info”。然后我得到错误为
语法错误:意外的文件结尾(需要“}”)
那么基本上如何逐行读取变量呢?
谢谢 非常感谢您的回复
答案1
这里字符串重定向<<<
不是标准功能,Busybox 的 sh 也不支持它。错误消息有点奇怪,但它可能将其解析<<
为<
.此外,here-doc 语法,以<<
完全不同的方式开始。
你必须做类似的事情
echo "$info" | while IFS= read -r line; do
printf '%s\n' "$line"
done
或者通过临时文件传递数据:
tmpfile=$(mktemp)
awk '/pat1/{flag=1}/pat2/{flag=0}flag' file1 > "$tmpfile"
while IFS= read -r line; do
printf '%s\n' "$line"
done < "$tmpfile"
rm "$tmpfile"