我是 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