变量及其含义"/>
Shell 特殊变量及其含义
shell是我们在linux下编写自动执行程序的常见脚本工具,通常会涉及到以下几个特殊变量,它们分别是:$#、$*、$@、$?、$$。
变量 | 含义 |
---|---|
$0 | 当前脚本的文件名。 |
$n(n≥1) | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1,第二个参数是 $2。 |
$# | 传递给脚本或函数的参数个数。 |
$* | 传递给脚本或函数的所有参数。 |
$@ | 传递给脚本或函数的所有参数。当被双引号" " 包含时,$@ 与 $* 稍有不同,详细讲解见下面注2。 |
$? | 上个命令的退出状态,或函数的返回值。 |
$$ | 当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。 |
注1:
$? 是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值。
所谓退出状态,就是上一个命令执行后的返回结果。退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1,这和C语言的 main() 函数是类似的。
注2:
在没有双引号包裹时,$*与 $@相同:都是数组
$*与 $@的相同点:当它们在没有被双引号包裹时,两者是没有区别,都代表一个包含接收到的所有参数的数组,各个数组元素是传入的独立参数。
也就是说下面两段代码是等效的。
#!/bin/shsome_func() {for var in $@doecho ${var}done
}#---other_func() {for var in $*doecho ${var}done
}some_func 1 2 3 4other_func 1 2 3 4
以上shell脚本输出如下:
./test.sh
1
2
3
4
1
2
3
4
被双引号包裹时,$*与 $@不同:"$@"为数组,"$*"为一个字符串
$*与 $@不同点:当被双引号包裹时,$@与没有被双引号包裹时没有变化,$@仍然是一个数组,每个参数依然是分割独立的;但当$*被双引号包裹时,SHELL会将所有参数整合为一个字符串。
下面两段代码的结果是不同的。
#!/bin/shsome_func() {for var in "$@"doecho ${var}done
}#---other_func() {for var in "$*"doecho ${var}done
}some_func 1 2 3 4other_func 1 2 3 4
以上shell脚本的输出如下:
./test.sh
1
2
3
4
1 2 3 4
更多推荐
Shell 特殊变量及其含义
发布评论