重击减法故障:var = $((var-1))给出了荒谬的值

时间:2019-02-28 15:18:28

标签: linux bash loops math while-loop

脚本:

#!/bin/bash
var=$1;
while [[ "$var" -ge "0" ]];
do
  echo -ne "$var"\\r;
  var=$((var-1));
  sleep 1;
done

除非我传递参数10(即var = 10),否则它会很好地工作,在这种情况下,倒数显示为:10, 90, 89, 88,...我也尝试了var=$[var-1];甚至试图存储临时文件中的变量,并在循环中更新它时从那里读取它,同样的奇怪行为!为什么它不起作用?

Linux版本: Debian Wheezy

1 个答案:

答案 0 :(得分:1)

这不是扑朔迷离。这是TTY打印您的值的方式。您正在发送\r的代码carret return。这样,您就可以打印数字,并将字型移回行首。因此,实际上echo会打印1098等,但不会擦除第二个字符。尝试像这样修补您的代码:

echo -ne "$var   "\\r;

并查看输出。您还可以将\r更改为\n,然后看看会发生什么。