我是 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)
我需要做什么来保留空白?
谢谢。
你需要做
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)