在Unix Shell脚本中逐行(带空格)读取文件-问题

在Unix Shell脚本中逐行(带空格)读取文件-问题,shell,unix,ksh,Shell,Unix,Ksh,我想在Unix shell脚本中逐行读取文件。行可以包含前导空格和尾随空格,我想在行中也读取这些空格。 我尝试在读取行时使用,但读取命令正在从行中删除空格字符: 如果文件中的行是:- abcd efghijk abcdefg hijk 第行应理解为:- 1 abcd efghijk 2 abcdefg hijk 我所尝试的是这一点,但不起作用:- while read line do echo $line done < file.txt 我想要一行,包括空格和制表符。 请建议一

我想在Unix shell脚本中逐行读取文件。行可以包含前导空格和尾随空格,我想在行中也读取这些空格。 我尝试在读取行时使用,但读取命令正在从行中删除空格字符: 如果文件中的行是:-

abcd efghijk
 abcdefg hijk
第行应理解为:- 1 abcd efghijk 2 abcdefg hijk

我所尝试的是这一点,但不起作用:-

while read line
do
   echo $line
done < file.txt
我想要一行,包括空格和制表符。 请建议一种方法。

试试这个

IFS=''
while read line
do
    echo $line
done < file.txt
您希望读取原始行以避免输入use-r中出现反斜杠问题:

这将保留行内的空格,但删除前导空格和尾随空格。要同时保留这些,请将IFS设置为空,如中所示

while IFS= read -r line; do
   printf "%s\n" "$line"
done < file.txt
现在,只要file.txt以换行符结尾,它就相当于cat
请注意,您必须双引号$line,以防止单词拆分将行拆分为单独的单词,从而丢失多个空格序列。

习惯用法是,您将仅为read语句指定空IFS,以避免奇怪的副作用:而IFS=read line
while read -r line; do
   printf "<%s>\n" "$line"
done < file.txt
while IFS= read -r line; do
   printf "%s\n" "$line"
done < file.txt