关于shell类型声明的疑惑

题目描述

z@z:~/www/z/test/shell$ a=11
z@z:~/www/z/test/shell$ b=22
z@z:~/www/z/test/shell$ c=$a+$b
z@z:~/www/z/test/shell$ echo $c
11+22

因shell变量默认都为字符串类型,这时变量c的值为11+22可以理解

然后问题来了,我用declare将c声明为整型,输出c值依然为11+22

z@z:~/www/z/test/shell$ declare -i c
z@z:~/www/z/test/shell$ echo $c
11+22

声明了整型,为什么c的值依旧为字符串?

阅读 2k
2 个回答

shell似乎并不会强制转换,但如果你再执行一次的话,是想要的结果

a=11
b=22
c=$a+$b # 11+22

declare -i c
c=$a+$b # 33

实际应用中不用这么麻烦的定义为整形吧,bash下

m=11
n=22
k=$((m + n)) # 33

# 或者
m=11
n=22
((k = m + n)) # 33


# 或者
m=11
n=22
k=$[m + n] # 33
新手上路,请多包涵

用let命令可以得到想要的结果
let c=$a+$b
echo $c

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题