如何在bash中获得1号码的产品? (12345> 1x2x3x4x5)
我正在尝试获取一个脚本来进行乘法运算,我已经尝试转义* char但没有运气,我也试过摆弄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"
答案 0 :(得分:2)
您可以从参数扩展中获取字符串的长度,无需调用外部工具。
#!/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"
答案 1 :(得分:1)
gawk (GNU awk)解决方案:
echo 12345 | awk -v FPAT="[0-9]" '{ r=$1; for(i=2;i<=NF;i++) r=r*$i }END{ print r }'
输出:
120
FPAT="[0-9]"
- 表示字段值,以便每个字段包含一个数字答案 2 :(得分:1)
据我所知,你希望得到数字乘数的值
假设您有号码:
number=12345
您必须在数字之间插入*:
echo $number | sed 's/\([0-9]\)/\1*/g'
我们将获得字符串:
1*2*3*4*5*
我们不需要最后的星号 - 让我们删除它:
echo $number | sed 's/\([0-9]\)/\1*/g' | sed 's/.$//g'
我们会得到这个:
1*2*3*4*5
我们现在可以将其重定向到calc:
echo $number | sed 's/\([0-9]\)/\1*/g' | sed 's/.$//g' | calc -p
它的标准是:
120
答案 3 :(得分:1)
\*
在算术表达式中是错误的,它应该只有*
。但即使这样运行你的代码也会给出:
$ 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"
您的代码还有一些问题:
$
Bash