“while read -r LINE; do”正在用一个空格替换多个空格

“while read -r LINE; do”正在用一个空格替换多个空格

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

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

while read -r LINE; do
    echo $LINE
done <<< "hello     there
today   world"

但是,运行时,它输出的每组单词之间仅包含一个空格:

hello there
today world

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

hello       there
today   world

有什么办法可以做到这一点吗?如果没有阅读,那么还有其他的吗?

答案1

打印变量时在变量周围加上引号。它被扩展然后分词,因此echo获取hellothere作为单独的参数。

echo "$LINE"

或更好

printf '%s\n' "$LINE"

会保留你的空白

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

相关内容