我得到expr语法错误在bash shell为一个简单的程序


#!/bin/bash
clear 
echo "Enter a number"
read a 
s = 0
while [ $a -gt 0 ]
do
r = ` expr $a % 10 `
s = ` expr $s + $r `
a = ` expr $a / 10 `
done
echo "sum of digits is = $s"
这是我的代码,伙计们。我得到了一堆expr语法错误。我正在使用bash shell。谢谢!

您的错误是由赋值中=周围的空格引起的,以下替换应该可以工作(我更喜欢使用$(),因为它们更容易嵌套):

s=0
r=$(expr $a % 10)
s=$(expr $s + $r)
a=$(expr $a / 10)

例如,s = 0(带空格)没有将变量s设置为零,而是尝试运行带有两个参数=0的命令s

然而,调用外部expr 1来执行数学操作并捕获变量的输出并不是真正必要的。这是因为bash本身可以很好地完成,而无需诉诸于输出捕获(参见bash手册页中的ARITHMETIC EVALUATION):
#!/bin/bash
clear
read -p "Enter a number: " number
((sum = 0))
while [[ $number -gt 0 ]]; do
    ((sum += number % 10))
    ((number /= 10))
done
echo "Sum of digits is $sum"

你会注意到我已经做了一些我认为增强可读性的其他小的改变,但你可以恢复到你的原始代码,如果你愿意,只是使用((expression))方法,而不是expr


1如果你不介意

调用外部可执行文件,在bash中不需要循环,你可以使用更隐蔽的方法:
#!/bin/bash
clear
read -p "Enter a number: " number
echo "Sum of digits is $(grep -o . <<<$number | paste -sd+ | bc)"

但是,说实话,我想我更喜欢可读的解决方案:-)

相关内容

  • 没有找到相关文章

最新更新