脚本:
#!/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
答案 0 :(得分:1)
这不是扑朔迷离。这是TTY打印您的值的方式。您正在发送\r
的代码carret return
。这样,您就可以打印数字,并将字型移回行首。因此,实际上echo
会打印10
,9
,8
等,但不会擦除第二个字符。尝试像这样修补您的代码:
echo -ne "$var "\\r;
并查看输出。您还可以将\r
更改为\n
,然后看看会发生什么。