我的编程空间,编程开发者的网络收藏夹
学习永远不晚

详解shell数组${arr[*]}和${arr[@]}区别

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

详解shell数组${arr[*]}和${arr[@]}区别

引用数组中所有元素时${arr[*]}和${arr[@]}是有细微区别的

Example:

#!/bin/sh
function showarr(){
        arr=$1
        for b in ${arr[*]};do
                echo $b
        done
        return 0
}
regions=('aa pp' 'bb' 'cc')
showarr $regions
exit 0

详解shell数组${arr[*]}和${arr[@]}区别

$regions其实只引用了数组的第一个元素

#!/bin/sh
function showarr(){
        arr=$1
        for b in ${arr[*]};do
                echo $b
        done
        return 0
}
regions=('aa pp' 'bb' 'cc')
showarr ${regions[*]}
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
showarr ${regions[@]}
exit 0

详解shell数组${arr[*]}和${arr[@]}区别

引用了数组全部元素,但是showarr函数中arr变量只获取了第一个参数的值 "aa"

#!/bin/sh
function showarr(){
        arr=$1
        for b in ${arr[*]};do
                echo $b
        done
        return 0
}
regions=('aa pp' 'bb' 'cc')
showarr "${regions[*]}"
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
showarr "${regions[@]}"
exit

详解shell数组${arr[*]}和${arr[@]}区别

此种情况跟 $* $@比较类似,${regions[*]}把参数打散,作为一个字符串整体传递,原有参数结构被破坏
${regions[@]}保持了原参数结构,因此$1其实为 'aa pp'

#!/bin/sh
function showarr(){
        arr=$1
        for b in ${arr[*]};do
                echo $b
        done
        echo "\$1: $1"
        echo "\$2: $2"
        echo "\$3: $3"

详解shell数组${arr[*]}和${arr[@]}区别

改进后的脚本执行情况验证了我们的猜想

结论: $@ $* ${arr[@]} ${arr[*]} 类似,加不加"", 使用@还是*根据实际情况选择

不加""的时候,@ 和 * 完全一样,加""时,@可以保持原有参数结构,*将原有参数结构打乱

shell对 "$@"会做特殊处理,"$*"可以认为是普通字符串

#!/bin/sh
for p in "$*";do
        echo $p
done
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
for p in "$@";do
        echo $p
done

详解shell数组${arr[*]}和${arr[@]}区别

"$@" 已经不是简单的字符串了

到此这篇关于详解shell数组${arr[*]}和${arr[@]}区别的文章就介绍到这了,更多相关shell ${arr[*]}和${arr[@]}内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

详解shell数组${arr[*]}和${arr[@]}区别

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

详解shell数组${arr[*]}和${arr[@]}区别

引用数组中所有元素时${arr[*]}和${arr[@]}是有细微区别的 Example: #!/bin/sh function showarr(){arr=$1for b in ${arr[*]};doecho $bdonereturn
2023-05-12

bash shell和dash shell的区别详解

最近在工作中遇到一个很奇葩的问题,就是一个嵌入式的SDK编译,它里面执行shell命令的时候,使用的dash 编程shell来解析,而通常我们默认用的是bajssh shell来解析;我按照bash shell那样照常编写脚本,大部分的脚本
2023-05-06

详解Shell $*和$@之间的区别

$* 和 $@ 都表示传递给函数或脚本的所有参数,我们已在《Shell特殊变量》一节中进行了演示,本节重点说一下它们之间的区别。 当 $* 和 $@ 不被双引号" "包围时,它们之间没有任何区别,都是将接收到的每个参数看做一份数据,彼此之间
2022-06-04

linux shell中“.” 和 “./”执行的区别详解

目前注意到的区别主要在于环境变量的作用域上: 1. 如果使用" ./ " 执行,可以理解为程序运行在一个全新的shell中,不继承当前shell的环境变量的值, 同时若在程序中改变了当前shell中的环境变量(不使用export),则当前s
2022-06-04

Go语言数组和切片的区别详解

本文主要介绍了Go语言数组和切片的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-14

Python中列表和元组的使用方法和区别详解

一、二者区别列表:1.可以增加列表内容 append2.可以统计某个列表段在整个列表中出现的次数 count3.可以插入一个字符串,并把整个字符串的每个字母拆分当作一个列表段追加到列表当中 extedn4.可以查询某个列表段在整个列表的位置
2022-06-04

goslice数组和切片使用区别示例解析

这篇文章主要为大家介绍了goslice数组和切片使用区别示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-01-03

Numpy中扁平化函数ravel()和flatten()的区别详解

本文主要介绍了Numpy中扁平化函数ravel()和flatten()的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-20

C语言中宏和函数的9个区别详解

C语言中的宏和函数是非常相似的,它们都可以完成类似的功能。本文为大家整理了C语言中宏和函数的9个区别,感兴趣的小伙伴可以跟随小编一起了解一下
2023-05-14

C++ 友元函数详解:友元函数和成员函数的区别?

友元函数允许外部函数访问类中的私有或受保护成员,通过在类定义中用 friend 关键字声明。与成员函数不同,友元函数声明在类外部,可访问类的私有和保护成员,而成员函数在类内部声明,可访问类所有成员。友元函数用作普通函数调用,而成员函数用类对
C++ 友元函数详解:友元函数和成员函数的区别?
2024-04-29

C++ 友元函数详解:友元函数和全局函数的区别?

友元函数可访问类私有和受保护数据成员,而全局函数不行,友元函数在类声明中声明,全局函数在类外声明,使用 friend 关键字声明友元函数,用 extern 关键字声明全局函数。友元函数通过声明方式获得访问类成员变量的权限,如通过声明一个友元
C++ 友元函数详解:友元函数和全局函数的区别?
2024-04-28

shell脚本5种执行方式及脚本不同的执行方法和区别详解

目录前言概述正题一、方式1绝对路径和方式2相对路径,可以归纳为同一种方法二、方式3使用 sh/bash命令来执行三、方式4使用 . (空格)脚本名称来执行四、方式5使用 source 来执行(主要用于生效配置文件)区别1.关于执行权限2.关
2022-07-19

编程热搜

目录