/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
,则将 sed
或 tr
添加到管道中,例如
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
检查一下,如果您还有其他问题,请告诉我。
我正在使用 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
,则将 sed
或 tr
添加到管道中,例如
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
检查一下,如果您还有其他问题,请告诉我。