数字与 shell 脚本的乘积

Product of a digit with a shell script

如何得到 bash 中 1 的乘积? (12345 > 1x2x3x4x5)

我正在尝试获取一个脚本来进行乘法运算,我尝试过转义 * 字符但没有成功,我也尝试过摆弄 expr。

echo -n "Enter number "
read n

len=$(echo $n | wc -c)

len=$(( $len - 1 ))

for (( i=1; i <= $len; i++ ))
do
   prod=$(($prod \* $(echo $n | cut -c $i) ))
done
echo "Product of $n is $prod"

gawk(GNU awk)解决方案:

echo 12345 | awk -v FPAT="[0-9]" '{ r=; for(i=2;i<=NF;i++) r=r*$i }END{ print r }'

输出:

120

  • FPAT="[0-9]" - 表示字段值,以便每个字段包含一个数字

通过参数展开即可获取字符串长度,无需调用外部工具

#!/bin/bash
read -p 'Enter number: ' n

product=1
for (( i=0; i < ${#n}; ++i )) ; do
    d=${n:i:1}
    (( product *= d ))
done
printf '%d\n' $product

并且,为了好玩,使用 Perl:

perl -MList::Util=product -le 'print product(split //, shift)' -- "$n"

据我了解,您想获得数字乘法的值

假设你有号码:

number=12345

您必须在数字之间插入 *:

echo $number | sed 's/\([0-9]\)/*/g'

我们将得到字符串:

1*2*3*4*5*

我们不需要最后的星号 - 让我们删除它:

echo $number | sed 's/\([0-9]\)/*/g' | sed 's/.$//g'

我们会得到这个:

1*2*3*4*5

我们现在可以将它重定向到 calc:

echo $number | sed 's/\([0-9]\)/*/g' | sed 's/.$//g' | calc -p

它的标准输出是:

120

\*在算术表达式中是错误的,应该是单独的*。但即便如此 运行 你的代码给出:

$ bash product.sh
Enter number 12
product.sh: line 10: * 1 : syntax error: operand expected (error token is "* 1 ")
Product of 12 is

错误原因是$prod变量没有设置为 之前的初始值,因此它被扩展为一个空值,例如 在您的终端中尝试:

$ echo $prod

$

在您的脚本中,您应该在使用前将 prod 设置为初始值 这是第一次。应该是:

echo -n "Enter number "
read n

len=$(echo $n | wc -c)

len=$(( $len - 1 ))

prod=1

for (( i=1; i <= $len; i++ ))
do
    prod=$(($prod * $(echo $n | cut -c $i) ))
done
echo "Product of $n is $prod"

您的代码还有一些问题:

  • 始终在顶部放置一个 shebang line
  • 总是double quote变量
  • Bash
  • 的算术表达式中不需要对变量使用 $