Bash变量
1. 变量定义
#!/bin/bash function var_declare() { local name="yuezhu" #函数局部变量 age=25 #默认全局变量 readonly sex="female" #全局只读变量 } function var_use() { echo "${name}" #error echo "${age}" #25 echo "${sex}" #female sex="male" #error unset name #删除变量定义 echo "${name}" } function main() { var_declare var_use } main $*
2. 特殊变量
$0 #当前脚本的文件名(包含路径) $n #传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 $# #传递给脚本或函数的参数个数。 $* #传递给脚本或函数的所有参数。(所有一起) $@ #传递给脚本或函数的所有参数。(一个一个)被双引号(" ")包含时,与 $* 稍有不同。 $? #上个命令的退出状态(退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1),或函数的返回值。 $$ #当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
3. $* 和 $@ 的区别
$* 和 $@ 都表示传递给函数或脚本的所有参数。
不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。
被双引号(" ")包含时
- "$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;
- "$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。
4. 变量替换
形式 |
说明 |
${var} |
变量本来的值 |
${var:-word} | 如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。 |
${var:=word} |
如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。 |
${var:+word} |
如果变量 var 被定义,那么返回 word,但不改变 var 的值。 |
${var:?message} |
如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。 若此替换出现在Shell脚本中,那么脚本将停止运行。 |