Author:rab
记了千百遍,也还没能记住的可以来看看了,走过路过的也可以来瞄一眼😉,这几个 shell 脚本特殊变量你都能分得清吗?
变量 | 释义 |
---|---|
$0 | 获取当前执行脚本名称。如:sh ./hello.sh 那该变量值就是 ./hello.sh |
$# | 获取传递给脚本或函数的参数个数(数) |
$* | 获取传递给脚本或函数的所有参数(值)-- 以空格分隔 |
$@ | 获取传递给脚本或函数的所有参数(值)-- 以空格分隔 |
$n | 获取传递给脚本或函数的参数(值)。如:sh hello.sh aa bb 那$1 变量值就是 aa ,$2 变量值就是 bb |
$? | 获取上一个命令或函数的退出状态。成功:0 失败:非0 |
$$ | 获取当前执行脚本的进程 PID |
注意❗️❗️❗️
这里注意一下 $* 和 $@ 的区别
,在没有被双引号(" ")的情况下,两者取值完全相同,但有双引号的情况下,就需要注意:
-
无双引号:两者没区别,都是以
"$1" "$2" ... "$n"
的格式输出。# 例如 sh hello.sh aa bb cc # $* 和 $@ 的输出 $*:aa bb cc $@:aa bb cc
-
有双引号:两者有区别,
"$*"
输出格式为"$1 $2 ... $n"
,即为一个整体输出。"$@"
输出格式则与无双引号时保持不变。# 例如 sh hello.sh aa bb cc # $* 和 $@ 的输出(看起来是一样的,但是"$*"的值是一个整体,也就是aa bb cc就是带有空格的一个值,而"$@"则是以空格分开的三个独立值) "$*":aa bb cc "$@":aa bb cc ================================ # 如果你使用一个 for 循环来取值 for i in "$*" do echo $i done for i in "$@" do echo $i done # $* 和 $@ 的输出("$*"只循环一次,因为它只有一个值,而"$@"却循环了三次,因为它有三个值) "$*":aa bb cc "$@": aa bb cc
完毕!