`IFS = read -r`仍然没有保留空格?

时间:2013-07-17 03:31:09

标签: bash

我试图在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时,为什么选项卡无法保留?

1 个答案:

答案 0 :(得分:4)

引用你的变量:

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

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