我的 sh 是 bash。我需要一个 0~9999 'for' 循环的百分位进度指示器...所以我在循环中使用这些行,但输出非常奇怪。
#!/bin/bash
declare -i percentile
for((i=0;i<=9999;i++))
do
percentile=($i+1)%100
if [ "$percentile" == 0 ];then
echo -ne $((($i+1)/100))\%\r
fi
done
echo -n '\n'
我想看到的是它输出“1%”,然后用“2%”和“3%”替换这一行...但不是“1%”、“2%”、“3%”,...逐行。
执行这个.sh文件后,终端上显示的是
-ne 1%r
-ne 2%r
-ne 3%r
-ne 4%r
-ne 5%r
-ne 6%r
-ne 7%r
-ne 8%r
-ne 9%r
-ne 10%r
...
bash 只是无法识别“-ne”选项和“echo”命令的转义“\r”,我应该怎么做才能解决这个问题?
答案1
如果您必须使用echo
,请尝试使用带引号的 return ,即'\r'
,而不仅仅是\r
。那么整行是:
echo -ne $((($i+1)/100))\%'\r'
答案2
我认为您没有使用,bash
因为-n
和标志通常都可以被's实用程序-e
理解。bash
echo
确保通过显式指定bash
为解释器来运行脚本,
$ bash ./script.sh
或者通过使其可执行并运行它,
$ chmod +x ./script.sh
$ ./script.sh
您在脚本中的算术运算也是错误的(计算时percentile
)。 在bash
中执行算术替换$(( ... ))
和算术求值(( ... ))
。
这是一个替代实现:
iter=70500
for(( i = 1; i <= iter; i++ )); do
if ! (( i % (iter/100) )); then
printf '\r%d%%' "$(( (100*i)/iter ))"
fi
done
echo