shell脚本中的$*,$@和$# shell脚本中的$*,$@和$#分别是什么意思?
我没用过$@,但是可以自己写个脚本测试下。
先介绍下我知道的,如下:
位置变量 :$0,$1,$2,$3,$4,$5,$6,$7,$8,$9 $0显示运行的脚本,$1...显示位置参数的值
预定义变量:
$# 表示位置参数的数量
$* 表示所有位置参数的内容
$? 表示命令执行后返回的状态 (执行成功 返回0 执行不成功 返回非0)
$$ 表示当前进程的进程号 希望打开一个进程后不再打开另一个(/proc/)
$! 表示后台运行的最后一个进程号
$0 表示当前的进程名
测试脚本如下:(位置变量只输出到$3)
[root@XP-24-35 script]#vim a.sh
#!/bin/bash
echo '$0 ==> ' $0
echo '$1 ==> ' $1
echo '$2 ==> ' $2
echo '$3 ==> ' $3
echo '$$ ==> ' $$
echo '$* ==> ' $*
echo '$@ ==> ' $@
echo '$# ==> ' $#
echo '$? ==> ' $?
执行结果1(输入小于三个位置参数a,b)
[root@XP-24-35 script]# ./a.sh a b
$0 ==> ./a.sh
$1 ==> a
$2 ==> b
$3 ==>
$$ ==> 4847
$* ==> a b
$@ ==> a b
$# ==> 2
$? ==> 0
执行结果2(刚好输入三个位置参数)
[root@XP-24-35 script]# ./a.sh a b c
$0 ==> ./a.sh
$1 ==> a
$2 ==> b
$3 ==> c
$$ ==> 4844
$* ==> a b c
$@ ==> a b c
$# ==> 3
$? ==> 0
执行结果3(输入大于3个位置参数)
[root@XP-24-35 script]# ./a.sh a b c d e f
$0 ==> ./a.sh
$1 ==> a
$2 ==> b
$3 ==> c
$$ ==> 4852
$* ==> a b c d e f
$@ ==> a b c d e f
$# ==> 6
$? ==> 0
实验结果说明一切,忘采纳,谢谢。
举例说:
脚本名称叫test.sh 入参三个: 1 2 3
运行test.sh 1 2 3后
$*为"1 2 3"(一起被引号包住)
$@为"1" "2" "3"(分别被包住)
$#为3(参数数量)
脚本名称叫test.sh 入参三个: 1 2 3
运行test.sh 1 2 3后
$*为"1 2 3"(一起被引号包住)
$@为"1" "2" "3"(分别被包住)
$#为3(参数数量)
我没用过$@,但是可以自己写个脚本测试下。
先介绍下我知道的,如下:
位置变量 :$0,$1,$2,$3,$4,$5,$6,$7,$8,$9 $0显示运行的脚本,$1...显示位置参数的值
预定义变量:
$# 表示位置参数的数量
$* 表示所有位置参数的内容
$? 表示命令执行后返回的状态 (执行成功 返回0 执行不成功 返回非0)
$$ 表示当前进程的进程号 希望打开一个进程后不再打开另一个(/proc/<PID>)
$! 表示后台运行的最后一个进程号
$0 表示当前的进程名
测试脚本如下:(位置变量只输出到$3)
[root@XP-24-35 script]#vim a.sh
#!/bin/bash
echo '$0 ==> ' $0
echo '$1 ==> ' $1
echo '$2 ==> ' $2
echo '$3 ==> ' $3
echo '$$ ==> ' $$
echo '$* ==> ' $*
echo '$@ ==> ' $@
echo '$# ==> ' $#
echo '$? ==> ' $?
执行结果1(输入小于三个位置参数a,b)
[root@XP-24-35 script]# ./a.sh a b
$0 ==> ./a.sh
$1 ==> a
$2 ==> b
$3 ==>
$$ ==> 4847
$* ==> a b
$@ ==> a b
$# ==> 2
$? ==> 0
执行结果2(刚好输入三个位置参数)
[root@XP-24-35 script]# ./a.sh a b c
$0 ==> ./a.sh
$1 ==> a
$2 ==> b
$3 ==> c
$$ ==> 4844
$* ==> a b c
$@ ==> a b c
$# ==> 3
$? ==> 0
执行结果3(输入大于3个位置参数)
[root@XP-24-35 script]# ./a.sh a b c d e f
$0 ==> ./a.sh
$1 ==> a
$2 ==> b
$3 ==> c
$$ ==> 4852
$* ==> a b c d e f
$@ ==> a b c d e f
$# ==> 6
$? ==> 0
实验结果说明一切,忘采纳,谢谢。
$* 这个程式的所有参数
$# 这个程式的参数个数
$@ 跟$*类似,但是可以当作数组用
具体的shell中$*与$@的区别可以参考下面这篇文章,正好解决你的疑惑
http://hi.baidu.com/linchaoqi/blog/item/568040f0bde485c97831aac8.html
"$@" 表示单独的输入参数;“p1 ”“ p2 p3”“p4 ”
"$*" 表示将所有的输入参数整合为1个;"p1 p2 p3 p4"
my_fun "$@" 相当于把$@传给了my_fun函数,因此my_fun的函数执行结果为3;
my_fun "$*" 相当于把"$*"传给了my_fun函数,因此my_fun的函数执行结果为1;
《shell脚本疑问,"$1"代表什么》
答:这边的 $1 就是你输入的脚本后面的参数啊,如果你脚本后面有参数 -k 就话,脚本执行时 $1就会变成你输入的参数了。