Bash unix中读取文件的差异

Bash unix中读取文件的差异,bash,unix,Bash,Unix,我的文件内容如下所示 bash-4.4$ cat b.txt unix unix

我的文件内容如下所示

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  
在shell中,默认情况下在IFS变量的字符上发生:空格、制表符和换行符

在for方法中,您没有引用命令替换$cat b.txt,因此会触发单词分割,并导致由IFS的这些字符分隔的单词在输出中作为单独的实体

使用while方法,read将读取到\n为止的每一行,因此您将获得输出中的整行

在逐行读取文件时,使用带有命令替换的for循环始终是错误的方法。改为使用带read的while循环。

在shell中,默认情况下发生在IFS变量的字符上:空格、制表符和换行符

在for方法中,您没有引用命令替换$cat b.txt,因此会触发单词分割,并导致由IFS的这些字符分隔的单词在输出中作为单独的实体

使用while方法,read将读取到\n为止的每一行,因此您将获得输出中的整行

在逐行读取文件时,使用带有命令替换的for循环始终是错误的方法。使用带有read的while循环。

:-尽可能多地阅读此页上的所有内容:-尽可能多地阅读此页上的所有内容