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循环。:-尽可能多地阅读此页上的所有内容:-尽可能多地阅读此页上的所有内容