我无法找到与此相关的任何内容,我的教授也无法解释发生了什么。问题描述如下:
经过大量调试之后,以下是bash脚本以打印odd
或even
:
echo $1
odd_even=$(echo "$1 % 2" | bc -l)
echo $odd_even
if [[ $odd_even -eq 0 ]]
then
echo "even"
else
echo "odd"
fi
以下是输出:
$ bash logic_ex2.sh 3
3
0
even
这很奇怪,因为变量odd_even
包含0
而参数是3
。
我们运行以下命令来检查echo "3 % 2" | bc -l
构造有什么问题,因为如果不使用该构造,我们可以使脚本正常工作:
$ echo "3 % 2" | bc -l
0
然后我们在终端中运行bc
并运行3 % 2
,将1
作为适当的输出。
有人可以解释一下这里发生了什么吗?
答案 0 :(得分:1)
检查this explanation的bc -l
与没有a % b
的普通bc
得出的-l
不同。快速解决方案是将比例尺重新设置为零:
$ bc -l <<< "scale=0; 3 % 2"
1
但是我可能根本不使用bc
来执行此操作,因为bash包含足够的功能来计算整数余数。如果您只需要整数数学,那么bash本身可能就足够了。
#!/usr/bin/env bash
echo "$1"
odd_even=$(($1 % 2))
echo "$odd_even"
if [[ $odd_even -eq 0 ]]; then
echo "even"
else
echo "odd"
fi
我的结果:
$ bash remtest.sh 3
3
1
odd
$ bash remtest.sh 4
4
0
even
答案 1 :(得分:0)
另一个选择:
#!/bin/bash
var=$1
if [[ $((var % 2)) -eq 0 ]];
then echo "$var is even";
else echo "$var is odd";
fi