Shell *与@区别

Shell *与@区别教程

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

Shell *与@区别

如果 $* 与 @ 被双引号 `" "` 包含时,"*" 会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据。"$@" 仍然将每个参数都看作一份数据,彼此之间是独立的。

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

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

案例

我们首先,打开一个 Shell,并新建一个 Shell 脚本,具体代码如下:

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

现在,我们运行该脚本,并传递参数,具体命令如下:

sh hellohaicoder.sh haicoder www.haicoder.net 109

运行后,终端输出如下:

22_Shell 与区别.png

我们看到,我们使用 “*" 时,所有的参数被当成了一个参数,而使用 "@” 时,被当成了多个变量。

Shell *与@区别总结

如果 $* 与 @ 被双引号 `" "` 包含时,"*" 会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据。"$@" 仍然将每个参数都看作一份数据,彼此之间是独立的。