"while read -r LINE; do" 用一个空格替换多个空格

Jos*_*ick 0 bash read

我正在尝试使用readbash 3.2读取文件,但read似乎将多个空格的任何实例转换为单个空格。

例如,下面的代码在“hello”和“there”之间有两个制表符,在“today”和“world”之间有三个空格:

while read -r LINE; do
    echo $LINE
done <<< "hello     there
today   world"
Run Code Online (Sandbox Code Playgroud)

但是,当运行时,它输出的每组单词之间只有一个空格:

hello there
today world
Run Code Online (Sandbox Code Playgroud)

相反,我希望它输出保留空格的行,例如:

hello       there
today   world
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?如果不是阅读,那么还有别的吗?

Eri*_*ouf 6

打印时在变量周围加上引号。它被扩展然后分词,所以echo得到hellothere作为单独的参数。

echo "$LINE"
Run Code Online (Sandbox Code Playgroud)

或更好

printf '%s\n' "$LINE"
Run Code Online (Sandbox Code Playgroud)

将保留您的空白

所以这不是read改变你的空格,而是你稍后没有引用变量

  • 为了保留任何前导/尾随空格,我认为还需要取消设置字段分隔符变量吗?即`while IFS= read -r LINE` (3认同)