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
完毕!