首页 > 解决方案 > Bash 减法故障:var=$((var-1)) 给出荒谬的值

问题描述

剧本:

#!/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

标签: linuxbashloopsmathwhile-loop

解决方案


这不是吓坏了。这是 TTY 打印您的价值观的方式。您发送\r的是carret return代码。通过这种方式,您可以打印数字,并且将 carret 移回行首。所以确实echo打印,,,,10..98它不会删除第二个字符。尝试像这样修补您的代码:

echo -ne "$var   "\\r;

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


推荐阅读