IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Shell 的数组定义方法 -> 正文阅读

[数据结构与算法]Shell 的数组定义方法

作者:recommend-item-box type_blog clearfix

目录

Shell数组

?数组的表达方式(四种方式)

方法一

方法二

方法三

?方法四

数组包括的数据类型

获取数组长度

?获取数据列表

读取某下标的赋值

数组遍历

数组切片

数组的替换

临时替换

?永久替换

?精确替换

数组的删除

数组追加元素(四种方法)

方法一

方法二

方法三

方法四

向函数传数组参数

从函数返回数组


Shell数组

?数组的表达方式(四种方式)

(30 20 10 60 50 40)
  0  1  2  3   4  5     #下标 从0开始 

方法一

数组名=(value0 value1 value2 value3 value4 …)

方法二


数组名=([0]=value [1]=value [2] =value...)

?下标2缺失的情况下,其他下标所对应的数值可以输出,只有下标2所对应的数值33不能输出

方法三

列表名= "value0 value1 value2..."

数组名=($列表名)

?方法四

数组名[0]="value"

数组名[1]="value" 

数组名[2]="value"

数组包括的数据类型

  • 数值类型
  • 字符类型
  • 使用"? "或者'? '定义

示例:

获取数组长度

格式:

arr_number=(1 2 3 4 5)

arr_length=${#arr_number[*]}

            ${#arr_number[@] }

echo $arr_length

?示例:数组的长度

?获取数据列表

echo ${arr_number[*]}

echo ${arr_number[@]}

读取某下标的赋值

arr_index2=${arr_number[2]}

echo $arr_index2

?示例:

数组遍历

#!/bin/bash

arr number=(1 2 3 4 5)

for V in ${arr_number[@]}

do

echo $v

done

示例:先定义数组,在利用for循环在数组中取值

?

数组切片

arr=(12345)

echo ${arr[@] }     #输出整个数组

echo ${arr[@]:0:2}   #获取${ 数组名[@或*]:起始位置:长度}的值

echo ${arr1[*]:1:3}

echo ${arr[@] :2:3}

示例:

数组的替换

注意:数组的替换需要谨慎使用,防止替换错误

arr=(12345)

echo ${arr[@]/4/66}#${数组名[@或*]/查找字符/替换字符}
echo ${arr[@]}   #并不会替换数组原有内容

arr=(${arr[@]/4/66})  #要实现改变原有数组,可通过重新赋值实现
echo ${arr[@] }

临时替换

?永久替换

?精确替换

数组的删除

arr=(12345)
unset arr       #删除数组
echo ${arr[*]}

arr=(12345)
unset arr [2]      #删除第三个元素
echo ${arr[*] }

示例:

?

数组追加元素(四种方法)

方法一

array_ name [ index] =value

方法二

array_ name[${ #array_ name[@]}]=value

方法三

array_ name= ("${array_ name[@]}" value1 ... valueN)
双引号不能省略,否则,当数组array_ name中存在包含空格的元素时会按空格将元素拆分成多个

不能将“g”替换为“*”, 如果替换为“*", 不加双引号时与“@”的表现一致,加双引号时,会将数组

array_ name中的所有元素作为一个元索添加到数组中

for i in "${array_ name[@]}"; do echo $i; done
当数组中存在包含空格的元素时会按空格将元素拆分成多个
[root@localhost ~]# array5=(${array4[*]})
[root@localhost ~]# echo ${array5[*]}
zhang san li si wang wu zhao liu
[root@localhost ~]# echo ${#array5[*]}
8

不能将"@"替换为"*",如果替换为"*",不加双引号时与"@"的表现一致,加双引号时,会将数组中的所有元素作为一个元素添加到数组中
[root@localhost ~]# array5=("${array4[*]}")
[root@localhost ~]# echo ${array5[*]}
zhang san li si wang wu zhao liu
[root@localhost ~]# echo ${#array5[*]}
1

正确写法:
[root@localhost ~]# array4=("zhang san" "li si" "wang wu" "zhao liu")
[root@localhost ~]# array4=("${array4[@]}" "qian qi" "zhu ba")
[root@localhost ~]# echo ${array4[*]}
zhang san li si wang wu zhao liu qian qi zhu ba
[root@localhost ~]# echo ${#array4[*]}
6

方法四

array_ name+= (value1 . . .valueN)

待添加元素必须用“()"包围起来,并且多个元素用空格分隔
[root@localhost ~]# array4+=("nan jing" "dong tai")
[root@localhost ~]# echo ${array4[*]}
zhang san li si wang wu zhao liu qian qi zhu ba nan jing dong tai
[root@localhost ~]# echo ${#array4[*]}
8

向函数传数组参数

如果将数组变量作为函数参数,函数只会取数组变量的第一个值。

格式:

test1() {
  echo "接收到的参数列表:$@"
  newarrary=($1)
  echo "新数组的值为:${newarrary[*]}"
}

######## main ########

array=(3 2 1 4 5)
echo "原始数组的值为:${array[*]} "

test1 $array
在函数外把数组传递到函数内

函数外

函数名 ${数组名[@]?}

使用 ${数组名[@]?} 获取数组的列表,在用这个列表作为参数给函数传递

函数内

使用 $@ 接收参数列表,在用 数组名=($@) 在函数内生成一个数组

示例:利用函数获取数组值,并算出数组中所有数的和

?

?

从函数返回数组

test3() {

? ? ?newarrary=(`echo $@`)

? ? ?sum=0

? for S in ${newarrary[*]}

? do

? ? ?sum=$[$sum + $S]

? done

? ? ? ?echo $sum

}

test4() {

? ? ? ?newarrary=(`echo $@`)

? ? ? for ((i=0; i<=$[$# - 1]; i++))

? ? ? do

? ? ? ? ? newarrary[$i]=$[${newarrary[$i]} * 2]

? ? ? ?done

? ? ? ? ? echo ${newarrary[*]}

? ? ? }

arr=(10 20 30 40 50)

? ? ? echo "原始数组的值为:${arr[*]}"

result1=`test3 ${arr[*]}`

? ? ? ? echo "新数组的和为:$result1"

示例:

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章           查看所有文章
加:2021-12-23 15:58:58  更:2021-12-23 16:01:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 16:30:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码