我的文件内容为
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
答案 0 :(得分:4)
在shell中,IFS
字符出现在for
变量的字符上:默认为空格,制表符和换行符。
在$(cat b.txt)
方法中,您没有引用命令替换IFS
,因此会触发分词(和word splitting),导致单词被{{{{{{ 1}}作为输出中的单独实体。
使用while
方法,read
读取每一行(最多\n
),这样您就可以在输出中获得整行。
使用带命令替换的for
循环总是错误的方法,同时逐行读取文件。使用while
循环代替read
。