shell中的特殊变量

兄弟,这世上就一种病,你永远也治不了,那就是穷病
1
2
# 当前进程ID
echo $$
1
2
# 当前脚本文件名
echo $0
1
2
# 传递给脚本或函数的参数,n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
echo $1
1
2
# 传递给脚本或函数的参数个数
echo $#
1
2
# 传递给脚本或函数的所有参数
echo $*
1
2
# 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同
echo $@
1
2
3
4
5
6
7
8
9
10
11
12
13
# $*和S@的差别

#!/bin/sh

echo "\$*=$*"
echo --------------------------
for n in "$*";do echo $n;done

echo ""
echo "\$@=$@"
echo --------------------------
for n in "$@";do echo $n;done

结果

1
2
3
4
5
6
7
8
9
10
11
$*=1 2 3 asdf $asdfasdf
--------------------------
1 2 3 asdf $asdfasdf

$@=1 2 3 asdf $asdfasdf
--------------------------
1
2
3
asdf $asdfasdf

从上面结果可以看到:
$*将所有位置参数当做一个字符串输出;
$@将每个位置参数当做独立的元素处理,带空格的参数也当做一个整体。

http://xstarcd.github.io/wiki/shell/shell_special_variables.html