Bash:输出时如何防止覆盖同一行?

时间:2013-11-03 21:27:35

标签: bash

我有这个

while read -r line
do
   echo -e "$line\r"
done <<< $keys

其中$ keys,如果打印,则显示30k行。

当如上所述进行回声时,我只得到一行作为输出。

我需要过滤每一行然后输出它。

  1. 为什么会发生这种情况(覆盖)
  2. 如何防止它发生?

2 个答案:

答案 0 :(得分:1)

由于\r命令中的echo,这种情况正在发生。

将解决将其替换为:

echo "$line"

同样重要的是要注意,要调用变量,您最好使用"$keys"来保留其格式。

所有在一起:

while read -r line
do
   echo -e "$line"
done <<< "$keys"

答案 1 :(得分:1)

使用更多报价

while read -r line
do
   echo -e "$line\r"
done <<< "$keys"

观察<<< "$keys"

中的引号

查找

$ printf -v keys '%s\n' "key one" "key two"
$ echo $keys
key one key two
$ # Oh dear
$ # Now with quotes:
$ echo "$keys"
key one
key two

$ # Yeah :)
$ # Same with a here string:
$ while read line; do echo "$line"; done <<< $keys
key one key two
$ # Oh dear :(
$ # Now with quotes:
$ while read line; do echo "Read: $line"; done <<< "$keys"
Read: line one
Read: line two
$ # Done \o/

在这篇文章中,您了解到:

  • 使用更多报价,
  • 使用更多报价,
  • 使用更多报价,
  • 使用更多报价,
  • 使用更多报价,
  • 并使用更多报价。

现在请记住,

每当你忘记引号时,上帝杀了一只小猫