`echo“$1%2”|bc-l`在终端或bash脚本中不起作用,但`bc`在`bc'中接受这些参数`

`echo“$1%2”|bc-l`在终端或bash脚本中不起作用,但`bc`在`bc'中接受这些参数`,bash,echo,modulo,bc,Bash,Echo,Modulo,Bc,我没有找到任何与此相关的东西,我的教授也无法解释发生了什么。以下是问题描述: 经过一段时间的调试,下面是打印奇数或偶数的bash脚本: 输出结果如下: $ bash logic_ex2.sh 3 3 0 even 这很奇怪,因为变量奇数偶数包含0,而参数是3 我们运行以下命令来检查echo 3%2 | bc-l构造的错误,因为如果不使用该构造,我们可以使脚本正常工作: $ echo "3 % 2" | bc -l 0 然后,我们在终端中运行bc,并运行3%2,得到1作为正确的输出 有人能解释

我没有找到任何与此相关的东西,我的教授也无法解释发生了什么。以下是问题描述:

经过一段时间的调试,下面是打印奇数或偶数的bash脚本:

输出结果如下:

$ bash logic_ex2.sh 3
3
0
even
这很奇怪,因为变量奇数偶数包含0,而参数是3

我们运行以下命令来检查echo 3%2 | bc-l构造的错误,因为如果不使用该构造,我们可以使脚本正常工作:

$ echo "3 % 2" | bc -l
0
然后,我们在终端中运行bc,并运行3%2,得到1作为正确的输出

有人能解释一下这里发生了什么吗?

检查bc-l计算出的%b不同于没有-l的普通bc。快速解决方案是将比例设置回零:

$ bc -l <<< "scale=0; 3 % 2"
1
我的结果:

$ bash remtest.sh 3
3
1
odd
$ bash remtest.sh 4
4
0
even
另一种选择:

#!/bin/bash
var=$1

if [[ $((var % 2)) -eq 0 ]];
   then echo "$var is even";
   else echo "$var is odd";
fi

为什么不奇偶=$$1和1?谢谢@ghoti,这很有效!你对比例的解释现在有道理了。我被这件事弄糊涂了,但现在一切都清楚了。我会接受并支持你的回答,但我没有足够的声誉。。
$ bash remtest.sh 3
3
1
odd
$ bash remtest.sh 4
4
0
even
#!/bin/bash
var=$1

if [[ $((var % 2)) -eq 0 ]];
   then echo "$var is even";
   else echo "$var is odd";
fi