Bash脚本求和报错:expression语法错误(错误令牌为:)求助
Bash累加脚本语法错误修复
错误根源
你的脚本第3行for n in "$@":末尾多了个冒号:,这是导致语法错误的核心原因。Bash会将这个冒号当成循环列表的一部分,把每个命令行参数都拼接上冒号(比如最后一个参数7变成了7:)。当执行算术运算时,7:不是合法的整数,就会抛出syntax error in expression (error token is ":")的错误,而输出的10是前三个参数(1+2+7)的计算值。
修复后的完整脚本
将第3行的冒号删除即可,同时可以把算术运算写法优化得更简洁:
#!/bin/bash sum=0 for n in "$@" do ((sum += n)) done echo $sum
注:
((sum += n))是Bash推荐的算术运算写法,比sum=$(($sum + $n))更简洁易读。
验证执行效果
执行修复后的脚本,输入参数1 2 7 7,会得到正确的累加结果:
ubuntu@taskserver:~/var/save/Task$ ./SumAll.sh 1 2 7 7 17
额外优化建议
为了让脚本更健壮,可以添加参数合法性检查,避免传入非整数参数导致错误:
#!/bin/bash sum=0 for n in "$@" do # 检查参数是否为正整数 if ! [[ "$n" =~ ^[0-9]+$ ]]; then echo "错误:参数 '$n' 不是合法整数" >&2 exit 1 fi ((sum += n)) done echo $sum
内容的提问来源于stack exchange,提问作者Vigneshwaran
相关产品推荐
相关产品推荐

