Shell编程基础(第2篇:数组)

Shell编程基础(第2篇:数组)前言 shell 编程中的数组用于保存多个元素 数组操作的那些功能 它都有 创建数组 添加元素 修改元素 读取元素 删除元素 遍历数组 shell 编程提供的数据结构非常少 数组是最常用的数据结构 所以大家一定好好学习数组 创建数组的 9 个方式 你没有看错

大家好,我是讯享网,很高兴认识大家。

前言

    shell编程中的数组用于保存多个元素,数组操作的那些功能,它都有:创建数组、添加元素、修改元素、读取元素、删除元素、遍历数组。

    shell编程提供的数据结构非常少,数组是最常用的数据结构,所以大家一定好好学习数组!

创建数组的9个方式

你没有看错,创建方式真的不止9种方式,我也是服了shell标准了!

1、最常用方式,元素之间使用空格字符分隔,每个元素直接放在括号里

创建的是3个元素的数组

first=(one two three)

讯享网

2、元素之间使用换行符分隔,也放在括号里

包括3个元素的数组

讯享网second=( one two three )

3、直接通过下标赋值,第一个元素的下标从0开始

同样创建的是3个元素的数组

third[0]=one third[1]=two third[2]=three

4、每个元素前指定下标位置,下标值顺序可以任意指定,还放在括号里

讯享网fourth=([1]=two [0]=one [2]=three)

5、混合创建方式,只有下标0、下标5存在元素,其它下标默认为空

fifth=(hello [5]=world)

6、利用文件名替换,*表示文件名替换,文件名替换后的结果,由于使用空格字符隔开,所以bash解释器利用其特点,符合数组的创建规范,刚好组合成数组中的元素!

注意:bash解释器看到*时,会首先在当前工作目录下进行文件名替换,返回的各个文件名又以空格字符隔开,符合数组的创建规范

讯享网sixth=(*.mp3)

7、使用declare命令创建,数组名为seventh

declare -a seventh

8、利用变量值替换,由于变量值替换会先执行,且是由空格字符隔开的元素,也同样符合shell数组的规范

注意:bash解释器会先执行变量值替换,由于值中间包含空格字符,符合数组的规范,正好组成数组的元素

讯享网temp="one two three" eighth=(${temp})

由于变量值替换先被执行,所以替换后是这个样子的,空格字符天生用于隔开数组中的元素,符合数组规范

eighth=(one two three) 

9、利用命令替换,返回的标准输出由于有换行字符,此时自动组合进数组里

注意:命令替换也会被bash解释器优先执行,替换后的结果,正好符合数组的规范

讯享网my_array=($(ls)) echo ${my_array[0]}

创建数组的总结:只要符合空白字符去隔开元素:空格、换行、制表符、或者混合,只要的空白字符隔开即可创建数组!!!!!!!!!!!!!!!!!!!!!!!记住了!!!!好灵活

比如:以下由制表符、换行符、空白字符组成的数组,1和4之间使用制表符、4和5之间使用换行符、5和6之间使用空格字符)

注意:制表符一般不容易打出来,空格字符和换行符作为数组的分隔是最常见的

a=(1      4

5 6)

添加元素

1、未指定下标添加元素,直接使用数组名添加元素,新元素为第一个元素(注意:如果存在,会被替换,数组名等同于下标0)

demo=([1]=wc) demo=wang # 等同于 demo[0]=wang echo ${demo[@]} 

输出:

讯享网wang wc

 

2、指定下标添加元素

demo[10]=wc

3、数组末尾添加多个元素,使用+=

讯享网my=(wang yuan wai) my+=(a b c) echo ${my[@]}

删除元素

 1、删除单个元素

my=(wang yuan wai) unset $my[1]

2、删除整个数组

讯享网my=(wang yuan wai) unset my

修改元素

1、指定下标修改,元素存在,即为修改

my=(wang yuan wai) my[1]=haha

2、修改第一个元素的两种方式

my=baby

my[0]=baby

查找元素(访问)

1、查找单个元素值


讯享网

第一个元素的下标是0

讯享网my=(wang yuan wai) echo ${my[0]}

2、查找所有元素,使用*

my=(wang yuan wai) echo ${my[*]}

3、查找所有元素,使用@(建议)

讯享网my=(wang yuan wai) echo ${my[@]}

查找全部元素时*与@的区别?

1、for in的后面没有双引号修饰,无区别

my=("baby first" "the man") 

for i in ${my[*]}; do
    echo $i
done

for i in ${my[@]}; do
    echo $i
done

输出:

baby

first

the

man

2、for in后面使用双引号修饰,*作为整体(由于单词分隔功能无效,for in后面的list,同样依赖空白字符,双引号内的空格字符已失效),@按照每个元素分隔

讯享网my=("baby first" "the man") 

*访问全部元素

 for i in "${my[*]}"; do
    echo $i
done 

输出:

 baby first the man

此时对于for in,它看到的是"baby first the man"

 @访问全部元素(@会强制让单词分隔功能仍然有效,这点作者设计的很坑爹)

for i in "${my[@]}"; do
    echo $i
done

 输出:

此时对于for in,它看到的是"baby first" "the man"

通用

1、元素个数的获取(数组长度)

my=(wang yuan wai) echo ${#my[@]}

语法另类……

 

2、查看数组某个元素(字符串)的长度

讯享网my=(wang yuan wai) echo ${#my[0]}

3、查看已赋值元素的下标

my=([0]=wang [50]=yuanwai [100]=wai)

总结

1、bash的数组没有空余元素,举例:my[100]=wang,其中0-99位置并不会创建空余元素

2、遍历元素,建议使用for循环与${my[@]}

3、直接赋值一个数组为空,无法清空数组,举例:my=(wang yuan wai); my=;

4、还有一种declare创建数组的方式,举例:declare -a my_array

5、数组是你使用率最高的数据结构了,它创建方式的灵活性让你一定爽歪歪

6、现在bash增加了类似字典的关联数组,以后单开一篇文章介绍

小讯
上一篇 2025-01-14 08:43
下一篇 2025-03-06 23:41

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/18435.html