返回顶部
首页 > 资讯 > 操作系统 >详解shell数组${arr[*]}和${arr[@]}区别
  • 574
分享到

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

2023-05-12 05:05:10 574人浏览 八月长安
摘要

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

引用数组中所有元素时${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[@]}内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

--结束END--

本文标题: 详解shell数组${arr[*]}和${arr[@]}区别

本文链接: https://lsjlt.com/news/202034.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 详解shell数组${arr[*]}和${arr[@]}区别
    引用数组中所有元素时${arr[*]}和${arr[@]}是有细微区别的 Example: #!/bin/sh function showarr(){ arr=$1 for b in ${...
    99+
    2023-05-12
  • Array.apply()、new Array()和arr =[]有什么区别
    本文小编为大家详细介绍“Array.apply()、new Array()和arr =[]有什么区别”,内容详细,步骤清晰,细节处理妥当,希望这篇“Array.apply()、new Array()和arr =[]有什么区别”文章能帮助大家...
    99+
    2023-06-27
  • bash shell和dash shell的区别详解
    最近在工作中遇到一个很奇葩的问题,就是一个嵌入式的SDK编译,它里面执行shell命令的时候,使用的dash shell来解析,而通常我们默认用的是bash shell来解析;我按照bash shell那样照常编写脚本,...
    99+
    2023-05-06
    bash shell dash shell
  • 详解Shell $*和$@之间的区别
    $* 和 $@ 都表示传递给函数或脚本的所有参数,我们已在《Shell特殊变量》一节中进行了演示,本节重点说一下它们之间的区别。 当 $* 和 $@ 不被双引号" "包围时,它们之间没有任何区别,都是将接收到的每个参数看...
    99+
    2022-06-04
    Shell $* $@
  • linux shell中“.” 和 “./”执行的区别详解
    目前注意到的区别主要在于环境变量的作用域上: 1. 如果使用" ./ " 执行,可以理解为程序运行在一个全新的shell中,不继承当前shell的环境变量的值, 同时若在程序中改变了当前shell中的环境变量(不使用ex...
    99+
    2022-06-04
    shell “.” “./”
  • Go语言数组和切片的区别详解
    目录数组声明以及初始化函数参数切片声明以及初始化函数参数总结参考文章:在 Go 语言中,数组和切片看起来很像,但其实它们又有很多的不同之处,这篇文章就来说说它们到底有哪些不同。 另外...
    99+
    2023-05-14
    Go 数组和切片
  • js 数组 find,some,filter,reduce区别详解
    区分清楚Array中filter、find、some、reduce这几个方法的区别,根据它们的使用场景更好的应用在日常编码中。 Array.find Array.find 返回一...
    99+
    2024-04-02
  • PHP 函数和 Shell 函数的区别
    php 函数和 shell 函数的主要区别在于安全性(php 函数更安全)、可靠性(shell 函数因操作系统而异)、功能(shell 函数更强大但受 shell 限制)、性能(php ...
    99+
    2024-04-24
    php shell
  • Shell中exit和return的区别讲解
    1.exit命令 exit命令是Shell内建命令,用于退出当前Shell进程。使用格式如下: exit [<n>] 可以指定退出状态n,n的取值范围是0-255,一般情况下,0表示正常退出,非零表示异...
    99+
    2022-06-04
    shell中exit和return shell中exit和return的区别讲解
  • jsp和servlet区别详解
    jsp和servlet区别详解jsp和servlet的区别有以下几点:Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。推荐:《Java学习》js...
    99+
    2015-04-20
    java教程 jsp servlet
  • MyISAM和InnoDB区别详解
    MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,但却有一个缺点:不...
    99+
    2024-04-02
  • resulttype和resultMap区别详解
    目录 一、对象不同 1. resultMap 2. resultType 3. 分析 二、描述不同 1、resultMap 2、resulTtype 三、类型适用不同 一、对象不同 1. resultMap 如果查询出来的结果的列名和实...
    99+
    2023-09-05
    mybatis java mysql
  • 详解JS中? ?和?. 和||的区别
    目录1、 与 || 的区别2、 和 . 的区别1、 与 || 的区别 1)相同点: 和 || 的用法相同,都是前后是值,中间用符号连接,根据前面的值来判断最终是返回前面的值还是后面...
    99+
    2024-04-02
  • swift元组和数组有什么区别
    Swift元组和数组在Swift语言中都用来存储多个值,但它们有以下区别:1. 类型:数组(Array)是同种类型的元素的有序集合,...
    99+
    2023-10-19
    swift
  • Redis和Memcached的区别详解
    Redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储系统进行过比较: 1.Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支持...
    99+
    2022-06-04
    详解 区别 Redis
  • Linux下“/”和“~”的区别详解
    ”/“是根目录,”~“是家目录。linux存储是以挂载的方式,相当于PofNAHfXm是树状的,源头就是”/“,也就是根目录。而每个用户都有”家“目录,也就是用户的个人目录,比如root用户的”家“目录就是/root,普...
    99+
    2022-06-04
    Linux “/”和“~”区别 Linux /和~
  • Servlet中/和/*的区别详解
    目录本文提纲版本约定✍正文点拨“市面上”的错误答案1、/用于Servlet,demo:这个urlPatterns是合法的。只不过它属于精确匹配,也就是说别看它中间有*,仍...
    99+
    2024-04-02
  • C和C++的区别详解
    目录通过程序来介绍1.iostream文件2.头文件名的区别C语言C++3.名称空间namespace封装性4.使用cout进行C++的输出指针和数组名的区别反汇编查看区别结论解引用...
    99+
    2024-04-02
  • mysql中#{}和${}的区别详解
    #{}会将传入的数据当成一个字符串,会对自动传入的数据加一个双引号 order by #{userId}   这里假如userId = 111,那么解析成sql时...
    99+
    2024-04-02
  • vue3ref和reactive的区别详解
    目录Refreactive源码分析视频 点击进入 Ref ref数据响应式监听。ref 函数传入一个值作为参数,一般传入基本数据类型,返回一个基于该值的响应式Ref对象,该...
    99+
    2023-03-19
    vue3 ref 和reactive
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作