shell的特殊变量
原文:http://blog.csdn.net/imfinger/article/details/6257509
linux中shell变量\(#,\)@,\(0,\)1,$2
的含义解释:
变量 | 说明 |
---|---|
$$ | Shell本身的PID(ProcessID) |
这个变量经常用来构造一个"unique"的临时文件名,通常比调用mktemp 来得简单 | |
$! | Shell最后运行的后台Process的PID |
$? | 最后运行的命令的结束代码(返回值) |
$- | 使用Set命令设定的Flag一览 |
$* |
所有参数列表。如"\(*"用「"」括起来的情况、以"\)1 \(2 … \)n"的形式输出所有参数。
|
所有的位置参数,被作为一个单词,注意:"$*"必须被""引用。 | |
$@
|
与$*同义,但是每个参数都是一个独立的""引用字串,这就意味着参数被完整地传递, |
并没有被解释和扩展.这也意味着,每个参数列表中的每个参数都被当成一个独立的单词。 | |
注意:"$@"必须被""引用。 | |
$# | 添加到Shell的参数个数 |
$0 | Shell本身的文件名 |
$n
|
添加到Shell的各参数值。n为数字1-9,只能表示前9个参数,使用shift命令可以改变这个限制
|
$_ | 保存之前执行的命令的最后一个参数 |
一个简单的脚本,执行以后再解释各个变量的意义:
-
variable.sh
#!/bin/sh echo "number:$#" echo "scname:$0" echo "first :$1" echo "second:$2" echo "argume:$@"
-
执行结果:
./variable aa bb number:2 scname:./variable first: aa second:bb argume:aa bb
-
通过显示结果可以看到:
$# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一个参数 $2 是传递给该shell脚本的第二个参数 $@ 是传给脚本的所有参数的列表
-
获取最后个参数
#!/bin/sh args=$# lastargs=${!args} echo $lastargs echo ${!#} echo $(eval echo "\$$#")
-
$*
和S@
的差别
test.sh
#!/bin/sh echo "\$*=$*" echo -------------------------- for n in "$*";do echo $n;done echo "" echo "\$@=$@" echo -------------------------- for n in "$@";do echo $n;done
./test 1 2 3 'asdf $asdfasdf' $\*=1 2 3 asdf $asdfasdf -------------------------- 1 2 3 asdf $asdfasdf $@=1 2 3 asdf $asdfasdf -------------------------- 1 2 3 asdf $asdfasdf
从上面结果可以看到:
$*
将所有位置参数当做一个字符串输出;
$@
将每个位置参数当做独立的元素处理,带空格的参数也当做一个整体。