如何读取带有空格的’for’循环中的完整行

我正在尝试为文件运行for循环,我想显示整行。 但它只显示最后一个字。 我想要完整的一行。

 for j in `cat ./file_wget_med` do echo $j done 

运行后的结果:

 Found. 

这是我的数据:

 $ cat file_wget_med 2013-09-11 14:27:03 ERROR 404: Not Found. 

for循环在看到空格,制表符或换行符等空格时分割。 所以,你应该使用IFS(内部字段分隔符) :

 IFS=$'\n' # make newlines the only separator for j in $(cat ./file_wget_med) do echo "$j" done 

默认情况下for循环在任何空格(空格,制表符,换行符)上拆分; 一次在一行上工作的最简单方法是使用while read循环,它在换行符上拆分:

 while read i; do echo "$i"; done < ./file_wget_med 

希望你的命令每行吐出一个单词(这就是当我用自己的文件测试它时发生的事情)。 如果发生了其他事情,我不确定是什么原因造成的。

 #!/bin/bash files=`find  -name '*'` while read -r fname; do echo $fname done <<< "$files" 

validation工作,而不是你可能想要的一个class轮,但不可能优雅地这样做。

这是对Mitchell Currie的回答的一个小扩展,我喜欢因为副作用的范围很小,这避免了必须设置变量:

 #!/bin/bash while read -r fname; do echo $fname done <<< "`find  -name '*'`" 

我会这样写:

 cat ./file_wget_med | while read -rj do echo $j done 

因为它需要在原始脚本中进行最少的更改(除了使用IFS的解决方案,但它不仅修改了这个循环控制语句的bash行为)。