在 bash 中有没有比使用 tr -d 更好的回显方式?

Is there a better way to echo without a newline in bash than using tr -d?

我有一个从 5 倒数到 0 的脚本:

for a in {5..0}; do echo $a | tr -d \n; sleep 1; echo -e \b | tr -d \n; done

并添加 tr -d 对我来说看起来多余而且不太优雅。有没有办法在一行中回显而不必删除换行符?

您可以将 -n 标志与 echo 一起使用:

for a in {5..0}; do echo -n $a; sleep 1; echo -ne \b; done

或者直接使用 printf:

for a in {5..0}; do printf $a; sleep 1; printf \b; done

请注意,如果从大于或等于 10 的数字开始计数,这将显示无效数字。您可以使用 \r carriage return 字符并用 space 清除该行,例如假设最多 20 位数字并使用左格式并用 spaces 填充该行:

for a in {20..0}; do printf "\r%-20d" "$a"; sleep 1; done

使用 bash COLUMNS 变量和 * 参数传递宽度说明符 printf 你可以用 spaces 填充整行:

for a in {20..0}; do printf "\r%-*d" "$COLUMNS" "$a"; sleep 1; done

或者使用 ansi 转义序列来清除行:

for a in {20..0}; do printf "\r3[K%d" "$a"; sleep 1; done