bash 正在从变量中删除前导空格

bash 正在从变量中删除前导空格

我是 bash 新手(到目前为止只使用过 ksh)。我正在努力解决变量中的空白问题。我读过很多关于 bash 对前导空格处理的帖子,但我不确定如何在我的示例中纠正它。

echo "No space"         > x.tmp
echo "     Some space" >> x.tmp
cat x.tmp
cat x.tmp | while read line
do
   echo "$line" >> y.tmp
done
cat y.tmp

输出:

No space
     Some space
No space
Some space

我需要做什么来保留空白?

谢谢。

答案1

你需要做

while IFS= read -r line

将 IFS 设置为空字符串将保留空格。
使用-r将保留文本中的任何反斜杠序列。


如果性能是一个问题,请注意while read循环是非常bash 很慢。如果您想将输入放入行中,并且内存消耗不是问题,请将输入读入行数组中:

mapfile -t lines < x.tmp
for line in "${lines[@]}"; do
    do_something_with "$line"
done

相关内容