Bash 如何使用shell脚本获得n以下所有奇数的乘积
我试图得到所有奇数的乘积,直到n。但是输出总是0Bash 如何使用shell脚本获得n以下所有奇数的乘积,bash,shell,Bash,Shell,我试图得到所有奇数的乘积,直到n。但是输出总是0 read-p“输入一个数字:”n prod=0 对于((k=1;k任何算术表达式都需要以$(..)为单位),因此: read-p“输入一个数字:”n prod=0 对于((k=1;k4个问题): [k%1==0]表示“字符串k%1==0是否为非空?”并且始终为空,因此这将始终为真 操作符周围需要空格,并且=仅在Bash中允许,但不符合Posix k%1只是一个字符串;您需要一个算术上下文来计算 加在一起,这将是 如果[$((k%1))=0]
read-p“输入一个数字:”n
prod=0
对于((k=1;k任何算术表达式都需要以$(..)为单位),因此:
read-p“输入一个数字:”n
prod=0
对于((k=1;k4个问题):
[k%1==0]
表示“字符串k%1==0
是否为非空?”并且始终为空,因此这将始终为真
- 操作符周围需要空格,并且
=
仅在Bash中允许,但不符合Posix
k%1
只是一个字符串;您需要一个算术上下文来计算
加在一起,这将是
如果[$((k%1))=0];则
但是可以在Bash中替换为
如果((k%1==0));那么
- 有一个逻辑错误:要确定一个数字是否为奇数,必须检查它的模2;模1总是0:
如果((k%2==1));那么
可以缩短为
if((k%2);然后
因为(…)
中的非零结果是真实的
prod=$((prod*=k))
有一个冗余赋值:您可以使用
((prod*=k))
独自
- 您必须从
prod=1
开始,否则它将始终保持为0
组合,修复所有ShellCheck投诉:
!/usr/bin/env bash
阅读-rp“输入一个数字:”n
prod=1
for((k=1;k模运算对于此任务是多余的。只需使用C样式的for
循环,增量为2:
#!/bin/bash
read -p "Enter a number: " n
prod=1
for ((k = 3; k <= n; k += 2)); do ((prod *= k)); done
echo "Product of odd counting numbers until $n is $prod"
请注意,在此上下文中,prod+=“*$k”
是字符串连接,而不是算术运算。我已经删除了标记:这使用了多个bashism(read-p
,C-style for-loop),非常感谢!
#!/bin/bash
read -p "Enter a number: " n
prod=1
for ((k = 3; k <= n; k += 2)); do ((prod *= k)); done
echo "Product of odd counting numbers until $n is $prod"
#!/bin/bash
read -p "Enter a number: " n
prod=1
for ((k = 3; k <= n; k += 2)); do prod+="*$k"; done
printf "Product of odd counting numbers until %d is " "$n"
bc <<< "$prod"