Shell特殊变量¶
$0 |
当前脚本的文件名 |
$n |
传递给脚本或函数的参数. n是一个数字, 表示第几个参数. 例如, 第一个参数是$1, 第二个参数是$2, 以此类推. |
$# |
传递给脚本或函数的参数个数. |
$* |
传递给脚本或函数的所有参数. |
$@ |
传递给脚本或参数的所有个数. 当被双引号”“包围时, $@与$*稍有不同. |
$$ |
当前Shell进程ID. |
$? |
上个命令的退出状态(0表示正确, 其它表示错误), 或函数的返回值. |
$*和$@的异同¶
$*和$@都表示传递给脚本或函数的所有参数.
当$*和$@不被双引号""包围时, 它们之间没有任何区别, 都是将接收到的参数看做一个数组("$1", "$2", …, "$N"), 彼此之间用空格分隔.
但是当它们被双引号""包围时, 就会有区别了:
$*会将所有的参数从整体上看做一份数据, 而不是把每个参数都看做一份数据("$1 $2 ... $N");$@仍然将每个参数都看做一份数据, 彼此之间时独立的.
如果使用echo直接输出"$*"和"$@"作对比, 是看不出区别的;
但如果使用for循环来逐个输出数据, 立即就能看出区别来.
Example:
#!/usr/bin/env bash
echo '--- $* 演示 ---'
for i in "$*"
do
echo $i
done
echo '--- $@ 演示 ---'
for i in "$@"
do
echo $i
done
执行脚本, 输出结果如下:
$ chmod a+x test.sh
$ ./test.sh 1 2 3
--- $* 演示 ---
1 2 3
--- $@ 演示 ---
1
2
3
$?¶
$?是一个特殊变量, 用来获取上一个命令的退出状态, 或者上一个函数的返回值.
所谓退出状态, 就是上一个命令执行后的返回结果. 退出状态是一个数字, 一般情况下, 大部分命令执行成功会返回0, 失败返回非0值, 这和C语言的main函数是类似的.