Shell变量默认为字符串类型,需用declare命令显式声明类型:-i用于整数运算(自动求值,非法输入转0),-a用于索引数组,-r设只读,-x导出为环境变量;声明与赋值需同时进行才生效。

Shell变量默认全是字符串类型,想让它参与数学运算或存多个值,就得靠 declare 显式定义类型。它不是赋值命令,而是给变量“打标签”——告诉 shell 这个变量该按什么规则处理。
定义整数型变量(-i)
加了 -i 标签后,变量赋值时会自动做算术求值,非法输入会被转成 0,避免字符串拼接错误。
-
正确写法:先声明再赋值表达式,比如
declare -i sum=$a+$b,shell 会把$a+$b当算术式算出结果再存进去 -
注意点:如果变量已存在且是字符串,直接
declare -i var不会重算旧值;要生效,得在声明同时赋值,或重新赋值一次 -
异常处理:
declare -i age="abc"后echo $age输出0,不是报错,而是静默转为 0
定义数组型变量(-a)
数组分索引数组(下标为数字)和关联数组(下标为字符串),-a 用于前者。其实不加 declare -a 也能用数组语法,但显式声明更清晰、可读性更强。
-
声明并初始化:
declare -a fruits=("apple" "banana" "orange") -
逐个赋值:
declare -a user; user[0]="zs"; user[1]="ls" -
引用方式:
${user[0]}取单个元素,${user[@]}或${user[*]}取全部(前者保留空格分隔,后者合并为一串)
常见误区提醒
别把 declare 和普通赋值混用。比如 cc=$aa+$bb 是字符串拼接,而 declare -i cc=$aa+$bb 才是真计算。另外,-r(只读)和 -x(导出)这类属性也能和 -i 或 -a 组合使用,像 declare -ir pi=3 就是又只读又整数。

















