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

我想在Unix shell脚本中逐行读取一个文件。行中可以包含前导和尾部的空格,我想在行中也读取这些空格。 我试着用"while read line",但是read命令从行中删除了空格字符:( 例如,如果文件中的行是:-

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

编辑:

来自 "man bash "的信息

IFS - The Internal Field Separator that is used for word
splitting after expansion and to split lines into words
with  the  read  builtin  command. The default value is
``''
评论(2)

你想读取raw行,以避免输入中出现反斜线的问题(使用-r):

while read -r line; do
   printf "\n" "$line"
done < file.txt

这将保留行内的空白,但会删除前导和尾部的空白。要保留这些,请将IFS设为空,如

while IFS= read -r line; do
   printf "%s\n" "$line"
done < file.txt

现在,只要 "file.txt "以换行结尾,这就等同于cat < file.txt

注意,你必须双引号"$line",以防止分词法将该行分割成不同的词--从而丢失多个空白序列。

评论(0)