我如何从文件中读取并回显每行直到EOF?
我试过这个:
FILE=/Users/<User>/Desktop/Names.txt
echo "################################"
while read p; do
echo $p
done < $FILE
但是当我运行它时,输出是这样的:
################################
{rtf1ansiansicpg1252cocoartf1265cocoasubrtf200
{fonttblf0fswissfcharset0 Helvetica;}
{colortbl;red255green255blue255;}
margl1440margr1440vieww10800viewh8400viewkind0
pardtx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640pardirnatural
我做错了什么?我该怎么做呢?
答案 0 :(得分:4)
请改用此表格:
while IFS= read -r p; do
echo "$p"
done < "$FILE"
IFS=
的实例上添加了IFS
以使read
未设置,因此不会出现拆分或修剪空格的字词。-r
可以防止反斜杠有意义。""
引用变量可防止分词。请参阅read和Word Splitting。
另一种方法是将您的行加载到包含readarray
或mapfile
的数组。这需要Bash 4.0。请参阅mapfile。
readarray -t LINES < "$FILE"
printf '%s\n' "${LINES[@]}"
答案 1 :(得分:2)
您的文件不是纯文本。它是RTF格式(RTF)。您所看到的是文件的实际内容。
它具有.txt文件扩展名并且外观&#34;正常&#34;在一个支持RTF的文本编辑器中误导你。