【问题标题】:Bash subtraction malfunction: var=$((var-1)) gives ridiculous valuesBash 减法故障:var=$((var-1)) 给出荒谬的值
【发布时间】:2019-02-28 15:18:28
【问题描述】:

脚本:

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

【问题讨论】:

  • 为什么不直接写成((var--))呢?
  • ((var--)) 也不能解决它,因为正如@Szczad 解释的那样,bash 很好,它与我如何使用 echo " "\\r跨度>

标签: linux bash loops math while-loop


【解决方案1】:

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

echo -ne "$var   "\\r;

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

【讨论】:

  • 衣橱里的怪物!!!我尝试了您的解决方案,首先使用了一个不起作用的“标签”,但“空格”起作用了!谢谢...
猜你喜欢
  • 1970-01-01
  • 2014-07-03
  • 2015-01-04
  • 1970-01-01
  • 2023-03-24
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 2015-05-08
相关资源
最近更新 更多