1

我有这个

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

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

当像上面那样做 echo 时,我只得到一行作为输出。

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

  1. 为什么会发生这种情况(覆盖)
  2. 我怎样才能防止它发生?
4

2 回答 2

1

这是因为\r您的echo命令而发生的。

将其替换为:

echo "$line"

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

全部一起:

while read -r line
do
   echo -e "$line"
done <<< "$keys"
于 2013-11-03T21:31:07.087 回答
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/

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

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

现在记得,

每次你忘记引语,上帝就会杀死一只小猫

于 2013-11-03T21:31:19.900 回答