我可以在 Bash 脚本中使用分数/小数吗?

我可以在 Bash 脚本中使用分数/小数吗?

在 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,那么建议使用外部命令。

相关内容