Bash脚本从文件中读取并回显

时间:2014-08-16 19:10:35

标签: macos bash shell

我如何从文件中读取并回显每行直到EOF?

我试过这个:

FILE=/Users/<User>/Desktop/Names.txt

echo "################################"

while read p; do
        echo $p

done < $FILE

但是当我运行它时,输出是这样的:

################################
{rtf1ansiansicpg1252cocoartf1265cocoasubrtf200
{fonttblf0fswissfcharset0 Helvetica;}
{colortbl;red255green255blue255;}
margl1440margr1440vieww10800viewh8400viewkind0
     pardtx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640pardirnatural

我做错了什么?我该怎么做呢?

2 个答案:

答案 0 :(得分:4)

请改用此表格:

while IFS= read -r p; do
    echo "$p"
done < "$FILE"
  • 我们在IFS=的实例上添加了IFS以使read未设置,因此不会出现拆分或修剪空格的字词。
  • -r可以防止反斜杠有意义。
  • 围绕""引用变量可防止分词。

请参阅readWord Splitting

另一种方法是将您的行加载到包含readarraymapfile的数组。这需要Bash 4.0。请参阅mapfile

readarray -t LINES < "$FILE"
printf '%s\n' "${LINES[@]}"

答案 1 :(得分:2)

您的文件不是纯文本。它是RTF格式(RTF)。您所看到的是文件的实际内容。

它具有.txt文件扩展名并且外观&#34;正常&#34;在一个支持RTF的文本编辑器中误导你。