避坑实录:syntax error:operand expected (error token is "*") * 1语法错误:需要操作数(错误符号是 “* 1”)

实现1到100的累乘

#!/bin/bash
for i in {1..100}
do
        var=$[$var*$i]
done
echo $var

然后就会提示如标题的错误提示。
分析代码后,是因为是var未设初值。

#!/bin/bash
var=1
for i in {1..100}
do
        var=$[$var*$i]
done
echo $var

在循环前给var赋上初值就可以了。
此时真正的坑来了,点击执行之后得到的值为 0。
因为对linux不熟悉,我以为是我的代码写法有问题、怀疑是符号写错,在经历过用N种写法、百度谷歌找解决方法、重创一个系统都无效之后,我冷静地用输出log式的方法来分析问题所在。
为了测试结果简洁,我就将100改成了10,然后运行如下图
dd
成功了!
不对!我立马把10改成了20,得到了个二十位的数。
!!!
我,,,,,,好像发现了什么
不会是结果太大,爆了吧,我测试了累乘到更大的数,果然是溢出了最大值。结果显示为0,只是结果溢出了最大的数了。
呵呵,就一道复习材料上的习题,浪费了我好几个小时,而且一开始的代码就是老师给的答案。。。。
真的是醉了,想起c语言中无符号长整型变量最大值也就十位的数,这linux还是挺优秀的,就是这题目太坑人。
这个题目使我对边界条件的重视有了新的感受,在写代码时时时刻刻注意着边界条件是非常重要的,会让代码质量更高。所以记录这个小小的错误,以警示以后的我。
2018还有半个小时就要结束了,今年遗憾很多,也有些许收获。希望2019的我好好学习理论知识和训练写代码能力,让我足够优秀能在大四找到一个比较好工作。

君子终日乾乾,夕惕若厉,无咎。

猜你喜欢

转载自blog.csdn.net/NULL_thing/article/details/85486129