详解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特殊位置变量的问题小结

    shell特殊位置变量的问题小结

    这篇文章介绍了一些在Shell脚本中常用的特殊位置变量,如$n, $0, $#等,并详细解释了它们的功能和用法,感兴趣的朋友跟随小编一起看看吧
    2025-01-01
  • Linux find命令及实用示例详解

    Linux find命令及实用示例详解

    Linux系统中的find命令是用于搜索文件和执行操作的强大工具,通过指定搜索路径和条件,用户可以查找特定文件名、类型、权限等,并执行如打印路径、删除文件等操作,文章通过多个示例,展示了find命令在实际应用中的用法,感兴趣的朋友一起看看吧
    2024-10-10
  • shell脚本中echo显示内容带颜色的实现方法

    shell脚本中echo显示内容带颜色的实现方法

    这篇文章主要介绍了shell脚本中通过echo显示带颜色内容的实现方法,需要的朋友可以参考下
    2013-11-11
  • 详解linux less命令查看大文件

    详解linux less命令查看大文件

    less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。本文主要给大家介绍linux less命令查看大文件的相关知识,感兴趣的朋友一起看看吧
    2018-10-10
  • Shell内置命令之exit的语法与实例

    Shell内置命令之exit的语法与实例

    系统中是有exit命令的,用于退出当前用户的登录状态,但是在 Shell 脚本中,exit 语句是用来退出当前脚本的,下面这篇文章主要给大家介绍了关于Shell内置命令之exit的语法与实例,需要的朋友可以参考下
    2022-03-03
  • Linux shell 之 提取文件名和目录名的一些方法总结

    Linux shell 之 提取文件名和目录名的一些方法总结

    本篇文章主要介绍了Linux shell 之 提取文件名和目录名的一些方法总结,具有一定的参考价值,有兴趣的可以了解一下。
    2017-01-01
  • Shell脚本判断Apache进程是否存在

    Shell脚本判断Apache进程是否存在

    这篇文章主要介绍了Shell脚本判断Apache进程是否存在,若不存在则显示不存在,若存在则显示进程个数,当不等于10个时用红色字体通知管理员,需要的朋友可以参考下
    2014-12-12
  • Shell脚本位置参数的具体使用

    Shell脚本位置参数的具体使用

    本文主要介绍了Shell脚本位置参数的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Linux命令之find 和 grep用法详解

    Linux命令之find 和 grep用法详解

    今天主要介绍的是两个常用的搜索命令:find 和 grep 命令,文中代码示例介绍的非常详细,对我们学习Linux 命令有一定的帮助,需要的朋友可以参考下
    2023-06-06
  • shell脚本快速创建格式化磁盘与详细操作步骤

    shell脚本快速创建格式化磁盘与详细操作步骤

    这篇文章主要介绍了shell脚本快速创建格式化磁盘与详细操作步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01

最新评论