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

Ric*_*ard 4 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
Run Code Online (Sandbox Code Playgroud)

输出:

No space
     Some space
No space
Some space
Run Code Online (Sandbox Code Playgroud)

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

谢谢。

gle*_*man 8

你需要做

while IFS= read -r line
Run Code Online (Sandbox Code Playgroud)

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


如果性能是一个问题,请注意bash中的while read循环非常慢。如果你想把输入分成几行,而且内存消耗不是问题,那么将输入读入一个行数组:

mapfile -t lines < x.tmp
for line in "${lines[@]}"; do
    do_something_with "$line"
done
Run Code Online (Sandbox Code Playgroud)

  • @理查德 好!如果这解决了您的问题,请考虑[接受答案](https://unix.stackexchange.com/help/someone-answers)。 (3认同)