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

 更新时间:2023年05月09日 14:50:25   作者:ascertain  
本文主要介绍了详解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

$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

引用了数组全部元素,但是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

此种情况跟 $* $@比较类似,${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"
        return 0
}
regions=('aa pp' 'bb' 'cc')
showarr "${regions[*]}"
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
showarr "${regions[@]}"
exit 0

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

结论: $@ $* ${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获取指定日期前N天的日期

    利用shell获取指定日期前N天的日期

    最近因为项目的需要对比2015年10月的数据,因为一年来的数据经过了很多次调整和处理,遇到的最直接的问题是很多数据需要重新计算。只好写脚本刷数据。在准备脚本的过程中,就需要根据给定的日期处理数据,所以就有了这篇文章,下面有需要的朋友们一起学习学习。
    2016-11-11
  • shell脚本字符串和数组的使用操作方法

    shell脚本字符串和数组的使用操作方法

    这篇文章主要介绍了shell脚本字符串和数组的使用操作方法,在文中给大家提到shell将字符串分隔成数组的方法,需要的朋友可以参考下
    2019-06-06
  • shell使用mysqld_multi自动做多实例从库脚本

    shell使用mysqld_multi自动做多实例从库脚本

    这篇文章主要介绍了shell使用mysqld_multi自动做多实例从库脚本,需要的朋友可以参考下
    2014-03-03
  • linux常用命令之pip命令示例详解

    linux常用命令之pip命令示例详解

    本文介绍了 pip 命令的基本语法、常用选项和参数,以及一些常见的使用示例,通过学习和掌握 pip 命令,你可以方便地管理和使用 Python 包,提高开发效率,感兴趣的朋友跟随小编一起看看吧
    2023-12-12
  • linux shell字符串截取的详细总结(实用!)

    linux shell字符串截取的详细总结(实用!)

    在开发的时候经常会自行写一些小的脚本,其中就用到截取字符串的操作,这篇文章主要给大家介绍了关于linux shell字符串截取的详细方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Linux shell中改文件名的方法总结

    Linux shell中改文件名的方法总结

    这篇文章主要给大家介绍了关于Linux shell中改文件名的方法,在Shell中有多种方法可以来修改文件名,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • Linux常用ls, alias基础命令详解

    Linux常用ls, alias基础命令详解

    这篇文章主要介绍了Linux常用ls, alias基础命令详解,ls命令 的作用是列举目录文件信息,alias查看定义的别名,具体内容详情大家参考下本文
    2018-05-05
  • Linux下使用ntpdate进行时间同步的方法实现

    Linux下使用ntpdate进行时间同步的方法实现

    ntpdate是Linux下用于从NTP服务器同步时间的命令行工具,本文将给大家介绍Linux下使用ntpdate进行时间同步的方法实现,文中有相关的实现代码,需要的朋友可以参考下
    2024-03-03
  • Shell实现的一些数学运算自定义函数分享

    Shell实现的一些数学运算自定义函数分享

    这篇文章主要介绍了Shell实现的一些数学运算自定义函数分享,本文的一些函数主要重写了加减乘除算法,需要的朋友可以参考下
    2014-12-12
  • Shell脚本实现批量添加用户

    Shell脚本实现批量添加用户

    这篇文章主要介绍了Shell脚本实现批量添加用户,本文使用最简单的方法实现了指添加用户,需要的朋友可以参考下
    2014-12-12

最新评论