/bin/sh: 分别从管道读取参数

/bin/sh: read arguments from pipe separately

我正在使用 dash shell 作为 /bin/sh

以下命令打印:

echo aa bb cc | while read X ; do echo $X ; done
aa bb cc

如何单独读取参数,即打印:

echo aa bb cc | while read X ; do echo $X ; done
aa
bb
cc

由于read将一行输入读入指定变量,关键是让每个输入单独出现一行。如果您可以控制 echo,只需将其替换为 printf "%s\n" aa bb cc | ...,例如

printf "%s\n" aa bb cc | while read x ; do echo $x ; done

(注意: 避免对变量名使用全部大写——这些通常保留给 shell)

如果无法更改 echo,则将 sedtr 添加到管道中,例如

echo aa bb cc | sed -E 's/[[:blank:]]+/\n/g' | while read x ; do echo $x ; done

tr:

echo aa bb cc | tr ' ' '\n' | while read x ; do echo $x ; done

例子Use/Output

在所有情况下,您的输出都将是,例如

$ echo aa bb cc | tr ' ' '\n' | while read X ; do echo $X ; done
aa
bb
cc

检查一下,如果您还有其他问题,请告诉我。