我有以下shell脚本,总结了传递给它的所有参数(以空格分隔):
sum=0
for arg in "$@"; do
(( sum += arg ))
done
echo $sum
我将其另存为SumAll.sh
。因此,其功能如下:
sh SumAll.sh 2 4 6 8
20
或者
bash SumAll.sh 1 -2 3 -3
-1
两者都可以在我的本地计算机(MacBook)上运行,但是当我在linux服务器上尝试使用同一个脚本时,bash
可以正常运行脚本,但sh
不能正常运行。我收到以下错误:
sum: '+=': No such file or directory
sum: arg: No such file or directory
这是为什么?以及我该如何解决?
的算术评估(( ... ))
是对实现的标准POSIX Shell语法的扩展bash
。大多数sh
shell不了解该语法。
使用算术替代: sum=$(( sum + arg ))
在未实现非标准的Shell中(( ... ))
,您的(( sum += arg ))
命令将被解释为嵌套的子Shell,并sum
使用两个参数+=
和调用该命令arg
。
在MacOS,sum
是一种实用工具,文件计算校验和(见man sum
),以及文件+=
和arg
不能被发现(这就是为什么你会得到特定的错误)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句