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

如何在带有空格的“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.

答案1

for当循环遇到空格、制表符或换行符等空白时,循环就会拆分。因此,你应该使用IFS(内部字段分隔符)

IFS=$'\n'       # make newlines the only separator
for j in $(cat ./file_wget_med)    
do
    echo "$j"
done
# Note: IFS needs to be reset to default!

答案2

for默认情况下,循环会根据任意空格(空格、制表符、换行符)进行拆分;最简单的方法是线每次的方法是使用while read循环,在换行符处进行拆分:

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

我会预计您的命令每行输出一个单词(当我用自己的文件测试时,结果就是这样)。如果发生了其他事情,我不确定是什么原因造成的。

答案3

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

已验证有效,可能不是您想要的一行代码,但不可能优雅地做到这一点。

答案4

我会这样写:

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

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

相关内容