esx busybox shell 脚本,使用 while 从变量中逐行读取

esx busybox shell 脚本,使用 while 从变量中逐行读取

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"

但看为什么我的变量在一个“while read”循环中是本地变量,但在另一个看似相似的循环中却不是?如果你使用第一个。

相关内容