1

我试图在 while 循环迭代期间保留输入文件中的所有空格。这是我正在使用的文件(file1):

a@ubuntu:~$ cat file1
01: a   b   c
02: d   e   f

如您所见,我在每行的字符之间放置了制表符。我想在输出上保留这些标签。我曾尝试在 while 循环中清除 IFS,如下所示:

while IFS= read -r p; do
    echo $p
done < <(cat file1)

即使在我清除 IFS 之后,结果也出于某种原因摆脱了选项卡(我也尝试过 echo -e):

a@ubuntu:~$ sudo bash a.sh
01: a b c
02: d e f

但是,当我在 while 循环之外清除 IFS 时,它可以完美运行:

IFS=''

while read -r p; do
    echo $p
done < <(cat file1)

这是输出;选项卡被保留:

a@ubuntu:~$ sudo bash a.sh
01: a   b   c
02: d   e   f

为什么当我清除与 while 循环在同一行中的 IFS 时,选项卡无法保留?

4

1 回答 1

4

只需引用您的变量:

while IFS= read -r p; do     
  echo "$p"; 
done < file1

请注意,您也不需要使用cat

于 2013-07-17T03:39:35.763 回答