定义变量与获取变量的值
定义变量时
=
两端不能有空格
var_a=123 # 不可以有空格
var_b='123 1456' # 值中可以有空格 不可以引用变量
var_c="123 $var_a" # 值中可以有空格 可以引用变量
var_a=456 # 变量再次赋值时会替换掉原来的值
echo $var_a # 获取变量值
echo ${var_a} # 获取变量值
Shell 参数中各种符号的含义
# ---- 普通变量 ----
$var_a # 获取变量 var_a 的值
${var_a} # 获取变量 var_a 的值
${#var_a} # 获取变量 var_a 中的字符个数, 因为shell中变量一切值都默认为字符串
# ---- 数组变量 ----
${arr[@]} # 获取数组 arr 所有元素
${arr[*]} # 获取数组 arr 所有元素
${#arr[@]} # 获取数组 arr 中元素总数
${#arr[*]} # 获取数组 arr 中元素总数
# ---- 位置参数 ----
$0 # 获取位置参数的值
${10} # 获取位置参数的值
$# # 获取位置参数的总数, 不包括脚本文件名
$@ # 获取所有位置参数, 不包括脚本文件名
$* # 获取所有位置参数, 不包括脚本文件名
# 关于位置参数的注意点:
# $0 代表脚本名称
# $1 $2 $3 $4 $5 $6 $7 $8 $9 这几个参数可以用 $数字 的方式获取, 也可以用 ${数字} 的方式获取
# ${10} ... ${n} 第10个及以后的位置参数都只能用 ${数字} 的方式获取
# ---- 命令置换 ----
$(ls -l) # 命令置换, 推荐用法
`ls -l` # 命令置换, 不推荐使用, 容易和单引号混淆
$@ 与 $*的区别
$@
与$*
的区别: 不加引号时没有任何区别, 加引号时,"$@"
不变化,"$*"
会将所有参数合并为一个参数. 例如: test.sh
#!/bin/bash
for item in "$@";do
echo $item
done
echo "-------------------"
for item in "$*";do
echo $item
done
# 执行 test.sh a b c
# 输出
a
b
c
-------------------
a b c
变量操作
# 清空变量, 销毁变量
var_a="I am nothing."
unset var_a
# 设置变量只读
readonly var_a="I am very importent."