bash - `echo " $1 % 2" | bc -l` 在终端或 bash 脚本中不起作用,但 `bc` 在 `bc` 中接受这些参数
问题描述
我找不到与此相关的任何内容,我的教授也无法解释发生了什么。下面是问题描述:
经过相当多的调试后,以下是要打印的 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
作为正确的输出。
有人可以解释一下这里发生了什么吗?
解决方案
检查此解释,以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
推荐阅读
- c++ - 具有默认值的模板特化
- jenkins - Jenkins pipeline stuck forever after triggering another build
- ajax - Magento 2 How to pass js variable to controller and then call template with custom code?
- python - How to make arrow move randomly on a Canvas image?
- django - Getting "curl: (92) HTTP/2 stream 1 was not closed cleanly: INTERNAL_ERROR (err 2)"
- django - Django: how to use {{ something }} inside css file
- mysql - 在 ManyToMany 双向映射中,findAll() 获取行,每行都包含其子项,而子项又包含自身
- java - App force closes with an error: java.lang.RuntimeException: Unable to start activity ComponentInfo
- firebase - 构建 Firestore 数据以实现高效读取
- c++ - How to fix qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed error in QT