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

时间:2015-05-28 04:08:30

标签: bash expr

#!/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。 谢谢!

1 个答案:

答案 0 :(得分:4)

您的错误是由分配中=周围的空格引起的,以下替换应该有效(我更喜欢$()使用反引号,因为它们更容易嵌套):

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

例如,s = 0(带空格)不会将变量s设置为零,而是尝试使用两个参数{{1}运行命令s }和=

然而,调用外部0 1 进行数学操作并将输出捕获到变量并不是必要。这是因为expr本身可以做得很好没有求助于输出捕获(请参阅bash手册页中的ARITHMETIC EVALUATION):

bash

你会注意到我做了一些其他的小改动,我认为这些改变增强了可读性,但如果你愿意,你可以恢复原来的代码,只使用#!/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" 方法而不是{{1 }}

1 如果你没有介意调用外部可执行文件,那么((expression))中不需要循环,你可以改用偷偷摸摸的方法:

expr

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