在 Bash 脚本中使用分数或小数时是否要使用特定的语法?
我尝试使用以下脚本(在 Ubuntu 12.04 中):
#!/bin/bash
{
n=9
echo "$n"
for (( i=.5; $i <10; i++ ));
do
let "c=$i+1"
echo $i "+" $c
done
}
这适用于i=1
,但是当我输入时它会产生语法错误.5
。
答案1
是的,bash 只处理整数,但你可以解决这个问题,要么不使用 bash(Python 非常容易上手),要么使用它bc
来处理计算。
请记住,for 循环中的条件在分数下不起作用,因此您也需要扩展它。
step="0.5"
for (( i=0; $i<$(bc<<<"10/$step"); i++ )); do
echo $(bc<<<"$step * $i")
done
这将会0
逐渐9.5
产生回响0.5
。
答案2
有一种方法可以伪造分数,虽然有点笨拙,但在某些情况下还是有用的:
#!/bin/bash
{
n=9
echo "$n"
for (( i=5; $i <100; i+=10 ))
do
let "c=$i+10"
echo "$(( $i / 10 )).$(( $i % 10 )) + $(( $c / 10 )).$(( $c % 10 ))"
done
}
使用 div/modulo 您实际上还可以进行一些巧妙的(阅读:尴尬的)计算。
答案3
#!/bin/bash
{
n=9;
echo "$n";
for i in `seq .5 10`;
do
c=`bc <<< $i+1`;
echo $i "+" $c; done;
}
答案4
我要指出的是,虽然bash
仅限于整数运算,但ksh93
并非如此。因此,这个(更简单的例子)可以正常工作:
$ for ((i=0.5; i<3; i=$((i+1)))); do print $i ; done
0.5
1.5
2.5
我们使用i=$((i+1))
而不是i++
因为++
仅适用于整数。
所以我认为这就是原始提问者想要的(当然,除非它没有被完成bash
):
$ for ((i=0.5; i<10; i=$((i+1)))); do c=$((i+1)) ; print $i + $c ; done
0.5 + 1.5
1.5 + 2.5
2.5 + 3.5
3.5 + 4.5
4.5 + 5.5
5.5 + 6.5
6.5 + 7.5
7.5 + 8.5
8.5 + 9.5
9.5 + 10.5
这一切都是在 shell 本身内完成的,无需外部命令。如果需要使用bash
,那么建议使用外部命令。