现在的位置: 首页 > 编程语言 > 正文

Shell $*和$@的区别是什么

2020年02月12日 编程语言 ⁄ 共 747字 ⁄ 字号 评论关闭

  $* 和 $@ 都表示传递给函数或脚本的所有参数,我们已在《Shell特殊变量》中进行了演示,本节重点说一下它们之间的区别。

  Shell $*和$@的区别

  当 $* 和 $@ 不被双引号" "包围时,它们之间没有任何区别,都是将接收到的每个参数看做一份数据,彼此之间以空格来分隔。

  但是当它们被双引号" "包含时,就会有区别了:

  "$*"会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据。

  "$@"仍然将每个参数都看作一份数据,彼此之间是独立的。

  比如传递了 5 个参数,那么对于"$*"来说,这 5 个参数会合并到一起形成一份数据,它们之间是无法分割的;而对于"$@"来说,这 5 个参数是相互独立的,它们是 5 份数据。

  如果使用 echo 直接输出"$*"和"$@"做对比,是看不出区别的;但如果使用 for 循环来逐个输出数据,立即就能看出区别来。

  关于 for 循环的用法请猛击:Shell for循环和for int循环详解

  编写下面的代码,并保存为 test.sh:

  #!/bin/bashecho "print each param from \"\$*\""for var in "$*"do echo "$var"doneecho "print each param from \"\$@\""for var in "$@"do echo "$var"done

  运行 test.sh,并附带参数:

  [mozhiyan@localhost demo]$ . ./test.sh a b c d

  print each param from "$*"

  a b c d

  print each param from "$@"

  a

  b

  c

  d

  从运行结果可以发现,对于"$*",只循环了 1 次,因为它只有 1 分数据;对于"$@",循环了 5 次,因为它有 5 份数据。

抱歉!评论已关闭.