有没有比使用tr-d更好的方法在bash中不使用换行符进行回音?

有没有比使用tr-d更好的方法在bash中不使用换行符进行回音?,bash,echo,newline,Bash,Echo,Newline,我有一个从5倒计时到0的脚本: 对于{5..0}中的a;do echo$a | tr-d\\n;睡眠1;echo-e\\b | tr-d\\n;完成 对我来说,在tr-d上加钉看起来是多余的,不是很优雅。有没有一种方法可以在一行上回送而不必删除换行符?您可以在回送中使用-n标志: 或者只使用printf: 请注意,如果从大于或等于10的数字开始计数,这将显示无效数字。您可以使用回车符并用空格清除该行,例如,假设最大数字为20位,使用左格式并用空格填充该行: for a in {20..0}; d

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

对于{5..0}中的a;do echo$a | tr-d\\n;睡眠1;echo-e\\b | tr-d\\n;完成

对我来说,在tr-d上加钉看起来是多余的,不是很优雅。有没有一种方法可以在一行上回送而不必删除换行符?

您可以在回送中使用-n标志:

或者只使用printf:

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

for a in {20..0}; do printf "\r%-20d" "$a"; sleep 1; done
for a in {20..0}; do printf "\r%-*d" "$COLUMNS" "$a"; sleep 1; done
使用bash COLUMNS变量和带有printf的*参数传递宽度说明符,可以用空格填充整行:

for a in {20..0}; do printf "\r%-20d" "$a"; sleep 1; done
for a in {20..0}; do printf "\r%-*d" "$COLUMNS" "$a"; sleep 1; done
或使用ansi转义序列清除该行:

for a in {20..0}; do printf "\r\033[K%d" "$a"; sleep 1; done
您可以对echo使用-n标志:

或者只使用printf:

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

for a in {20..0}; do printf "\r%-20d" "$a"; sleep 1; done
for a in {20..0}; do printf "\r%-*d" "$COLUMNS" "$a"; sleep 1; done
使用bash COLUMNS变量和带有printf的*参数传递宽度说明符,可以用空格填充整行:

for a in {20..0}; do printf "\r%-20d" "$a"; sleep 1; done
for a in {20..0}; do printf "\r%-*d" "$COLUMNS" "$a"; sleep 1; done
或使用ansi转义序列清除该行:

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

你想要的只是echo-n?。。。或可移植版本printf“%s”$a@KamilCuk你说得对,我的错,对不起。为bash添加一个dupe,有人将更新golden badgeit@RavinderSingh13对不起,我误导了你bud@oguzismail,np,伙计,我一看到它就把它还原了,干杯。你想要的只是echo-n?。。。或可移植版本printf“%s”$a@KamilCuk你说得对,我的错,对不起。为bash添加一个dupe,有人将更新golden badgeit@RavinderSingh13对不起,我误导了你bud@oguzismail,np,老兄,我一看到它就把它还原了,干杯。学习echo-n是多么羞怯的方式啊。非常感谢您,也感谢其他脚本改进!了解echo-n是多么羞怯的方式。非常感谢您,也感谢其他脚本改进!