如何读取带有空格的’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
行为)。