linux - 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
解决方案
这不是吓坏了。这是 TTY 打印您的价值观的方式。您发送\r
的是carret return
代码。通过这种方式,您可以打印数字,并且将 carret 移回行首。所以确实echo
打印,,,,10
..9
但8
它不会删除第二个字符。尝试像这样修补您的代码:
echo -ne "$var "\\r;
并查看输出。您也可以更改\r
为\n
,然后看看会发生什么。
推荐阅读
- javascript - 单击时,单击另一个按钮不起作用。目标按钮是数据目标类型的按钮
- reactjs - 用户输入后立即添加一个附加组件
- javascript - 简单任务的问题:JavaScript 中的条件语句
- reactjs - 结合 .map 函数的事件处理
- vue.js - 如何模拟故事书故事中的模块?
- flutter - 颤振 | Dart - NoSuchMethodError:在 null 上调用了方法“map”
- javascript - 使用 Python 和 Javascript 在 CSV 中转换 HTML
- vim - 如何将 Mac OS X 终端设置为 VScode?
- google-cloud-automl - 设置访问 Google AutoML Vision 特定数据集的角色条件
- google-apps-script - 谷歌表格 - 发布日期和编辑它的用户名