Bash 如何使用shell脚本获得n以下所有奇数的乘积

Bash 如何使用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]

我试图得到所有奇数的乘积,直到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];则
    
    但是可以在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"