Bash里面$@和$*的区别

Bash里面$@和$*的区别

$@和 $*通常在bash处理命令行参数的时候使用。

相同点

大部分场景下他们是相同的,可以直接通用,表示命令行的所有参数,实际上是由细微差异的,细节的时候要注意区分。

差异点

可以这么理解:

  1. $@表示的是参数的数组类型
    当有多个参数的时候,每个参数占用一个数组元素。
  2. $*表示的是参数的字符串类型
    当有多个参数的时候,所有参数拼成一个长字符串作为一个参数。

举例

  1. 例子1
$ cat t.sh 
#!/bin/bash
echo "\$@=["$@"]"
echo "\$*=["$*"]"

$ ./t.sh 
$@=[]
$*=[]

$ ./t.sh aa bb
$@=[aa bb]
$*=[aa bb]

两者并无差异。

  1. 例子2
$ cat t.sh 
#!/bin/bash
echo "----0"
for i in $@; do echo "\$i=["$i"]"; done
echo "----1"
for i in $*; do echo "\$i=["$i"]"; done
echo "----2"

for i in "$@"; do echo "\$i=["$i"]"; done
echo "----3"
for i in "$*"; do echo "\$i=["$i"]"; done
echo "----4"

$ ./t.sh 
----0
----1
----2
----3
$i=[]
----4

$ ./t.sh aaa bbb
----0
$i=[aaa]
$i=[bbb]
----1
$i=[aaa]
$i=[bbb]
----2
$i=[aaa]
$i=[bbb]
----3
$i=[aaa bbb]
----4

这里我们看到$@和$*在没有双引号括起来的时候行为是一样的,而当使用双引号括起来的时候是不一样的。

  1. 对于$@假定是数组,那么数组为空,就是没有元素

  2. 对于$是字符串,字符串为空时,表示空串,但不为空值,所以在遍历
    $
    的时候能够找到一个元素,尽管这个元素的值是空串。

  3. 例子3
    这个例子调用子程序,并且把$@和 $*作为参数传递给子程序。

$ cat t.sh 
#!/bin/bash

./tt.sh $@
./tt.sh $*

./tt.sh "$@"
./tt.sh "$*"
$ cat tt.sh 
#!/bin/bash

echo "size="$# "\$@=["$@"]" "\$*=["$*"]"

$ ./t.sh 
size=0 $@=[] $*=[]
size=0 $@=[] $*=[]
size=0 $@=[] $*=[]
size=1 $@=[] $*=[]

$ ./t.sh aa bb
size=2 $@=[aa bb] $*=[aa bb]
size=2 $@=[aa bb] $*=[aa bb]
size=2 $@=[aa bb] $*=[aa bb]
size=1 $@=[aa bb] $*=[aa bb]

例子3也说明"$*"是一个字符串,当没有参数是,字符串为空,表示字符串的值为空串,并不是参数整个为空;这类似高级语言里面的null和"",如果是字符串那么他不会为null,只会是"",所以$#计算出来的值为1。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,657评论 0 5
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 6,260评论 0 10
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,395评论 0 13
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,621评论 0 4
  • 前两天见友人在朋友圈里晒幸福,友人先生买来礼物送给友人,既不过生日又不过节和纪念日,真正的惊喜。 底下的评论亮了:...
    sally2015阅读 252评论 1 0

友情链接更多精彩内容