我的文件内容是
bash-4.4$ cat b.txt
unix unix
unix
unix unix unix
linux
linux linux 下面的脚本读取文件的内容,一个使用for循环,另一个使用while循环。但两者都在以两种不同的方式打印内容。原因何在?
#/usr/bin/bash
echo "for loop approach"
for i in $(cat b.txt)
do
echo $i
done
echo ""
echo "while approach"
cat b.txt | while read line
do
echo $line
done
bash-4.4$ bash aa.bash
for loop approach
unix
unix
unix
unix
unix
unix
linux
linux
linux
while approach
unix unix
unix
unix unix unix
linux
linux linux 发布于 2018-04-05 12:53:53
在shell中,缺省情况下,word splitting出现在IFS变量的字符上:空格、制表符和换行符。
在您的for方法中,您没有引用命令替换$(cat b.txt),因此将触发单词拆分(和pathname expansion),从而导致单词在输出中由IFS的那些字符分隔为单独的实体。
使用while方法时,read读取每一整行(直到\n),因此您将在输出中获得整行。
逐行读取文件时,使用带有命令替换的for循环始终是错误的方法。改用带有read的while循环。
https://stackoverflow.com/questions/49664356
复制相似问题