首页 > 解决方案 > `echo " $1 % 2" | bc -l` 在终端或 bash 脚本中不起作用,但 `bc` 在 `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 % 21作为正确的输出。

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

标签: bashechomodulobc

解决方案


检查此解释,以bc -l计算a % bbc没有-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

推荐阅读