
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
完毕!
本文详细介绍了Shell脚本中的特殊变量,如$0用于获取脚本名,$#获取参数个数,$*和$@获取所有参数,$n获取第n个参数,$?获取上一命令状态,$$获取进程PID。特别强调了$*和$@在双引号环境下的差异,以及在for循环中如何使用它们。通过实例展示了它们在不同情况下的输出结果。
870

被折叠的 条评论
为什么被折叠?



