我可以打印到行尾吗?

Bow*_*owi 2 bash shell

考虑这个小例子:

printf "Loading data..."; \
sleep 5; \
echo -e "\rThis is my cool data point."
Run Code Online (Sandbox Code Playgroud)

当然,这会带来 ,Loading data...5 秒后,它将被 覆盖This is my cool data point.

但是如果之后打印的文本\r比第一行短怎么办?

printf "Loading data..."; \
sleep 5; \
echo -e "\rNo data."
Run Code Online (Sandbox Code Playgroud)

...No data.data...等待时间过后。

我是否必须跟踪最长的行并打印"\rNo data. ",或者是否有任何“魔术字符”填充该行直到其在普通终端中结束?

Wil*_*ell 9

您可以使用 删除到行尾tput el。所以你可以这样做:

eol=$(tput el)
printf "Loading data..."
sleep 5
printf "\rNo data.${eol}\n"
Run Code Online (Sandbox Code Playgroud)

它并不是真正的“魔法字符”,而是“魔法序列”,并且使用的实际值可能会因终端而异。 tput将(应该)做正确的事情并为您提供一个合理可移植的方法。试图精确地确定使用哪个序列是徒劳的。