考虑这个小例子:
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. ",或者是否有任何“魔术字符”填充该行直到其在普通终端中结束?
您可以使用 删除到行尾tput el。所以你可以这样做:
eol=$(tput el)
printf "Loading data..."
sleep 5
printf "\rNo data.${eol}\n"
Run Code Online (Sandbox Code Playgroud)
它并不是真正的“魔法字符”,而是“魔法序列”,并且使用的实际值可能会因终端而异。 tput将(应该)做正确的事情并为您提供一个合理可移植的方法。试图精确地确定使用哪个序列是徒劳的。
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |