首页 > 编程笔记 > Linux笔记 阅读▓█:21,842

Shell $*和$@的区别

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

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

但是当它们被双引号" "包含时▓▓,就会有区别了:
  • "$*"会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据▄■▄。
  • "$@"仍然将每个参数都看作一份数据,彼此之间是独立的。

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

如果使用 echo 直接输出"$*""$@"做对比,是看不出区别的;但如果使用 for 循环来逐个输出数据▄▓,立即就能看出区别来▓█▄■。
关于 for 循环的用法请猛击:Shell for循环和for int循环博猫
编写下面的代码,并保存为 test.sh▄■▓:
#!/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
运行 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 份数据█■▄。

编程帮,一个分享编程知识的公众号。跟着站长一起学习███,每天都有进步。

通俗易懂,深入浅出▓▓,一篇文章只讲一个知识点。

文章不深奥,不需要钻研▄■▄,在公交、在地铁、在厕所都可以阅读■■■,随时随地涨姿势。

文章不涉及代码,不烧脑细胞▄■▄■,人人都可以学习。

当你决定关注「编程帮」,你已然超越了90%的程序员▓▄▓▄!

编程帮二维码
微信扫描二维码关注