变量的命名
- 数字、字母、下划线。
- 不能以数字开头。
- 不能使用 shell 保留的名作为变量名。
- 变量赋值时,不能在等号两边添加空格。
变量赋值
- 定义或者重新赋值时,不加 $。
- 使用时加 $。
- 只读变量声明后,使用
readonly
标记。 - 关于变量:
- 使用命令
declare -p varName
可以罗列出varName
的所具有的属性。 - 使用命令
unset varName
可以删除变量。 - 只读变量不可以再次赋值。
- 使用命令
怎样查看定义的变量
- 使用
set | grep -o '^[a-zA-Z_][a-zA-Z0-9_]*='
。
注意,该命令只能显示变量名。 参数o
表示only-matching
。 - 使用
declare -p
查看。
变量类型
- 字符串
- 怎样声明
默认声明的变量是字符串。可以使用 '、"、` 等包裹内容,表示字符串。区别如下:- 使用 ',内容中间的 $ 符号不起作用。
- 使用 ",内容中的 $ 和 ` 符号起作用。
上述代码中,变量和命令都会生效。echo "welcome to $school, its name is `ls -l`"
- 使用 ` 包裹的内容,表示执行的命令。
- 计算长度的两种方式。
# 通过 # 获取长度 echo ${#varName} # 通过表达式计算获取长度 echo `expr length "${#varName}"`
- 截取
从第三个位置开始,截取 3 个字符。echo ${varName:2:3}
- 查找
- 查找单个字符
在echo `expr index "$demoStr" io`
demoStr
中查找i
或者o
,那个先出现,则返回那个的位置。
注意,第一个位置是 1 而不是 0。 - 查找字符串的位置
预留,暂未找到合适的方法
- 查找单个字符
- 删除
- 删除前缀
echo ${originStr#$preStr}
- 删除前缀
- 怎样声明
- 整数
如果赋予的值不是整数,那么它会尝试将其转换为整数,不能转换的默认转为 0.declare -i varInteger=3
- 浮点数
可以使用 bc 工具进行计算,然后再赋值。也可以使用 awk 进行计算赋值。- 使用 bc 示例。
result=$(echo "scale=2; 10.5 / 3" | bc) echo $result
- 使用 awk 示例。
result=$(awk 'BEGIN {printf "%.2f", 10.5 / 3}') echo $result
- 使用 bc 示例。
- 数组
- 整数索引数组。
- 定义如下:
注意,索引从 0 开始。int_arr=(3 1 5 9) echo ${int_arr[2]}
- 打印数组的所有元素。
注意,echo ${int_arr[@]} # 或者 echo ${int_arr[*]}
$int_arr
会打印数组的第一个元素。 - 获取数组的长度。
echo ${#int_arr[@]} # 或者 echo ${#int_arr[*]} # 获取数组某个元素的长度,n 表示下标。 echo ${#int_arr[n]}
- 定义如下:
- 关联数组,相当于字典。
declare -A associative_array associative_array["name"]="唯我独尊" associative_array["age"]=30 echo ${associative_array["age"]}
- 整数索引数组。