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

时间:2018-10-08 15:05:29

标签: bash echo modulo bc

我无法找到与此相关的任何内容,我的教授也无法解释发生了什么。问题描述如下:

经过大量调试之后,以下是bash脚本以打印oddeven

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作为适当的输出。

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

2 个答案:

答案 0 :(得分:1)

检查this explanationbc -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