bash从stdin或while循环读取完整行,空格而不修剪空白字符

时间:2016-01-08 15:27:26

标签: bash while-loop line complete

问题Reading file line by line (with space) in Unix Shell scripting - Issue中的答案通常与“C”本地化不同。

Bash让我惊讶,因为'read'内部功能修剪了白色字符。我没有找到完全的决心,只有两个部分。然后我在这里描述它。

例如,您有一些文本文件包含到包含结尾空格的行。为清晰起见,我写了引号:

'line 1 without ending spaces'
'line 2 with ending spaces  '

当你这样称呼时:

cat somefile.txt|while read LINE; do echo xx"$LINE"xx; done
你会看到:

'line 1 without ending spaces'
'line 2 with ending spaces'
看看这个,第二行是空间修剪! 怎么预防这个?这是我的答案:

1 个答案:

答案 0 :(得分:1)

使用空IFS读取所有字符,包括前导和尾随空格:

while IFS= read -r line; do echo "[$line]"; done < file

<强>输出:

[line 1 without ending spaces]
[line 2 with ending spaces  ]