$* 与 $@ 的区别

$* 与 $@ 的区别

为shell脚本指定的变元被存在两个特殊的变量$*和$@中。这两个变量之间的差别在于如何存储变元:$*不保存引用,而$@则保存。
   $*的行为有时候会产生一些问题,例如你的脚本aa中包含for循环操作有空格的文件名作为变元:
[code:1]$ aa "my shell 1.conf"[/code:1]
     使用$*代替$@将会产生一个问题,因为for循环将对文件my , shell, 1.conf执行三次,你所要求的文件 my shell 1.conf只需要一次。使用$@,就可以避免这个问题,因为每个变元都别当作引用而保存。
这两个的区别可以这样认为:
$@ 和 $* 在不加引号使用的时候是一样的,但是如果加上引号,"$@" 还是被shell解释为单独的位置变量,而 "$*" 则被认为是一个变量,简单来说就可以认为 "$*" 是一个字符串。
在shell中也有数组的概念,类似上面的,也有 "$@" 和 "$*"。比如 ${array[@]} 和 ${array
  • }。它们的区别和上面的大致一样,具体的可以参考参考一些详细介绍shell编程的资料。