我正在尝试对文件运行一个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
不仅修改了这个循环控制语句的行为)。