如何在for命令的循环变量中获取整行

如何在for命令的循环变量中获取整行

当我启动 beta 命令时,我得到了这个结果:

dda6e95c-ecd1-4c22-a8df-f118af6aff02 Mount to DZ70cd on /dev/vda
f01e331e-0394-423f-b8ea-150f6b88029e Mount to DZ74cd on /dev/vdc
9f0d31ec-caa2-4e88-9cbd-4c82ebda5be3 Mount to DZe64c on /dev/vdc
2f3da174-1f9e-40e7-8869-563d90b103f4 Mount to DZ0d76 on /dev/vdc

我想对通过 bash 循环接收到的每一行进行数据处理 for as :

 for i in `beta-command` ; do echo $i  ; done ;

我得到了这样的结果:

dda6e95c-ecd1-4c22-a8df-f118af6aff02
Mount
to
DZ70cd
on
/dev/vda
f01e331e-0394-423f-b8ea-150f6b88029e
Mount
to
DZ74cd
on
/dev/vdc

如何要求循环考虑行而不是术语?

感谢

答案1

您可以设置内部字段分隔符( IFS) 换行:

IFS=$'\n'; for i in $(beta-command) ; do echo $i; done

或者使用while循环:

while IFS= read -r i; do
  echo $i
done < <(beta-command)

或使用xargs

beta-command | xargs -I{} echo {}

awk或者如果您的任务是关于操作文本,则使用:

beta-command | awk '{print}'

关于优点(?)和缺点使用循环来处理每一行命令输出或文件,您可能读这个 (感谢@杰夫·夏勒)

相关内容