在sh中逐行读取命令输出(没有bash)

Read command output line by line in sh (no bash)

我基本上是在寻找一种方法来做到这一点

list=$(command)
while read -r arg
do
        ...
done <<< "$list"

使用 sh 而不是 bash。由于最后一行,代码没有 运行:

syntax error: unexpected redirection

有任何修复吗?

编辑:我需要编辑变量并在循环外访问它们,所以使用 | 是不可接受的(因为它创建了一个具有独立范围的子 shell)

编辑 2:这个问题与 Why does my Bash counter reset after while loop 不相似,因为我没有使用 |(正如我在上次编辑中注意到的那样)。我要求另一种实现它的方法。 (链接问题的答案仅解释了问题发生的原因,但未提供任何适用于 with sh (no bash).

的解决方案

你有什么理由不能这样做?应该工作..除非你在循环内分配任何你希望在完成时可见的变量。

 command |
 while read -r arg
 do
         ...
 done

在 POSIX sh 中没有纯粹的句法方法可以做到这一点。您需要为命令的输出使用临时文件或命名管道。

mkfifo output
command > output &

while read -r arg; do
    ...
done < output
rm output