Bash Echo将我的选项卡更改为空格

Bash Echo将我的选项卡更改为空格,bash,delimiter,Bash,Delimiter,我将以下网络结构作为如何在BASH中读取文件的基本示例: cat inputfile.txt | while read line; do echo $line; done 但是,我的inputfile.txt是以制表符分隔的,上面命令中的行是以空格分隔的 这给我的实际应用程序带来了问题,这当然比上面的更复杂:我想获取行,基于它生成一些新内容,然后将原始行和新内容作为额外字段输出。如果没有一堆cut-d'和sed-e的//\t/g'(这对于包含空格的制表符分隔的数据来说是不安全的),管道将变得足

我将以下网络结构作为如何在BASH中读取文件的基本示例:

cat inputfile.txt | while read line; do echo $line; done
但是,我的inputfile.txt是以制表符分隔的,上面命令中的行是以空格分隔的

这给我的实际应用程序带来了问题,这当然比上面的更复杂:我想获取行,基于它生成一些新内容,然后将原始行和新内容作为额外字段输出。如果没有一堆
cut-d'
sed-e的//\t/g'
(这对于包含空格的制表符分隔的数据来说是不安全的),管道将变得足够复杂

我看过IFS解决方案,但在这种情况下它们似乎没有帮助。我想要的是OFS…除了我在echo,不是awk!我想,如果我能让echo一字不差地说出我给它的东西,我的状态就会很好。有什么想法吗?谢谢

试试看:

cat inputfile.txt | while read line; do echo "$line"; done
相反

换句话说,它不是
read
替换选项卡,而是
echo

请参阅以下成绩单(使用选项卡所在的
):

pax$echo'hellother'|在读行时;不要重复$line;完成
你好
阅读行时,请注意$echo'hellother';做回显“$line”;完成
hellothere

好悲伤;有那么简单吗?谢谢无论如何,把引号放进去是一个很好的做法。替换标签是(ba)sh和echo之间的阴谋
echo$line
将行拆分为单词,然后这些单词被全局化并分别传递给echo,然后echo用空格将它们连接起来<代码>回显“$line”按原样传递字符串。相比之下,DOS/Windows
echo%line%
不做这两件事(甚至连echos都会逐字引用字符)。顺便说一句
read
将去掉前导和尾随空格,因此如果您想保留前导/尾随选项卡,请使用
。。。虽然IFS=read line…
(注意,由于对IFS的赋值是read命令上的前缀,因此它只适用于该命令,不必在之后重置)。感谢Gordon,您的评论对我帮助很大。您通常不需要将cat用作管道的一部分,只需直接从文件中重定向下一个命令的stdin:
,同时读取行;不要重复$line;完成
pax$ echo 'hello<<tab>>there' | while read line ; do echo $line ; done
hello there

pax$ echo 'hello<<tab>>there' | while read line ; do echo "$line" ; done
hello<<tab>>there