shell脚本中的$*,$@和$#

#!/bin/bashmy_fun(){echo"$#"}echo'thenumberofparameterin"$@"is'$(my_fun"$@")echo'then... #!/bin/bash
my_fun() {
echo "$#"
}
echo 'the number of parameter in "$@" is '$(my_fun "$@")
echo 'the number of parameter in "$*" is '$(my_fun "$*")
执行:./my.sh p1 "p2 p3" p4后返回:
the number of parameter in "$@" is 3
the number of parameter in "$*" is 1

$*表示所有这些参数都被双引号引住。若一个脚本接收两个参数,$*等于$1$2
$@表示所有这些参数都分别被双引号引住,若一个脚本接收到两个参数,$@等价于$1$2
$#表示提供给脚本的参数号

这里怎么看出$*和$@的区别呢?为什么执行结果是3和1呢?这里$#又是什么意思呢?
展开
 我来答
ytsword
推荐于2018-04-01 · TA获得超过677个赞
知道答主
回答量:95
采纳率:0%
帮助的人:74万
展开全部
举例说:
脚本名称叫test.sh 入参三个: 1 2 3
运行test.sh 1 2 3后
$*为"1 2 3"(一起被引号包住)
$@为"1" "2" "3"(分别被包住)
$#为3(参数数量)
linjy0224
推荐于2018-01-01
知道答主
回答量:26
采纳率:100%
帮助的人:16.1万
展开全部
  我没用过$@,但是可以自己写个脚本测试下。
先介绍下我知道的,如下:
位置变量 :$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

  实验结果说明一切,忘采纳,谢谢。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
喻逸2d
2011-01-01 · TA获得超过2399个赞
知道小有建树答主
回答量:534
采纳率:0%
帮助的人:245万
展开全部
$* 这个程式的所有参数
$# 这个程式的参数个数
$@ 跟$*类似,但是可以当作数组用
具体的shell中$*与$@的区别可以参考下面这篇文章,正好解决你的疑惑
http://hi.baidu.com/linchaoqi/blog/item/568040f0bde485c97831aac8.html
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友83d1a5be2
2018-03-31 · TA获得超过142个赞
知道答主
回答量:34
采纳率:0%
帮助的人:10.7万
展开全部
"$@" 表示单独的输入参数;“p1 ”“ p2 p3”“p4 ”
"$*" 表示将所有的输入参数整合为1个;"p1 p2 p3 p4"
my_fun "$@" 相当于把$@传给了my_fun函数,因此my_fun的函数执行结果为3;
my_fun "$*" 相当于把"$*"传给了my_fun函数,因此my_fun的函数执行结果为1;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式