资讯专栏INFORMATION COLUMN

Bash脚本编程之数组

mdluo / 2500人阅读

摘要:在有引号括起的情况下,表示多带带的数组元素,表示数组元素整体,没有引号括起的情况下都表示多带带的数组元素,类似和的区别获取连续的部分数组元素,其中可省略。

声明数组

declare -a array_name

数组初始赋值

array_name[xx]=value
其中xx表示下标,为大于等于0的整数数字

array_name=([xx]=value1 [yy]=value2 ...)
其中xx表示下标,为大于等于0的整数数字

array_name=(value1 value2 value3 ...)declare -a array_name=(value1 value2 value3 ...)

数组追加元素

array=( "${array[@]}" "new element" )array[${#array[*]}]="new element"

复制数组

array2=( "${array1[@]}" )array2="${array1[@]}"

获取单个、全部或连续的部分数组元素

${array_name[xx]}
获取下标为xx的单个元素

${array_name[@]}${array_name[*]}
获取所有元素。在有引号括起的情况下,"${array_name[@]}"表示多带带的数组元素,"${array_name[*]}"表示数组元素整体,没有引号括起的情况下都表示多带带的数组元素,类似$*$@的区别

${array_name[@]:index:length}
获取连续的部分数组元素,其中:length可省略。

arrayZ=( one two three four five )

# 提取所有元素
echo ${arrayZ[@]:0}     # one two three four five
# 提取下标从1开始(包含)的所有元素
echo ${arrayZ[@]:1}     # two three four five
# 提取下标从1开始(包含)的2个元素
echo ${arrayZ[@]:1:2}   # two three

获取数组元素个数

${#array_name[*]}${#array_name[@]}

获取数组某个元素的字符串长度

${#array_name[xx]}

提取数组中某个元素的部分字符串

${array_name[xx]:index:length}, 其中:length可省略

删除数组或数组元素

unset array_name[xx]
删除下标为xx的数组元素,等同于array_name[xx]=

unset array_name
删除整个数组

数组元素的字符串替换/删除操作

通常情况下,形如${name...}表示法的字符串操作都可以应用在数组上,使用${name[@]...}${name[*]...}的方式。

子字符串移除

arrayZ=( one two three four five five )

# 从每个元素的最左侧进行最短匹配,并删除匹配的字符串
echo ${arrayZ[@]#fiv}   # one two three four e e
echo ${arrayZ[@]#t*e}   # one two e four five five

# 从每个元素的最左侧进行最长匹配,并删除匹配的字符串
echo ${arrayZ[@]##t*e}  # one two four five five

# 从每个元素的最右侧进行最短匹配,并删除匹配的字符串
echo ${arrayZ[@]%h*e}   # one two t four five five

# 从每个元素的最右侧进行最长匹配,并删除匹配的字符串
echo ${arrayZ[@]%%t*e}  # one two four five five

子字符串替换

arrayZ=( one two three four fivefive fivefive )

# 对每个元素进行字符串匹配,并替换第一次匹配的字符串
echo ${arrayZ[@]/fiv/XYZ}   # one two three four XYZefive XYZefive

# 对每个元素进行字符串匹配,并替换所有匹配的字符串
echo ${arrayZ[@]//fiv/XYZ}  # one two three four XYZeXYZe XYZeXYZe

# 对每个元素进行字符串匹配,并删除所有匹配的字符串
echo ${arrayZ[@]//fi/}      # one two three four veve veve

# 从每个元素的最左侧进行最长匹配,并替换匹配的字符串
echo ${arrayZ[@]/#f*v/XYZ}  # one two three four XYZe XYZe

# 从每个元素的最右侧进行最长匹配,并替换匹配的字符串
echo ${arrayZ[@]/%i*e/XYZ}  # one two three four fXYZ fXYZ

# 其他用法:函数的标准输出作为要替换的字符串
replacement() {
    echo -n "!!!"
}
echo ${arrayZ[@]/%e/$(replacement)} # on!!! two thre!!! four fivefiv!!! fivefiv!!!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/63671.html

相关文章

  • bash编程数组

    摘要:数组数据结构,数据序列,保存连续多个数据,可以使用索引获取相关元素声明数组声明索引数组声明关联数元素赋值一次赋值一个元素一次赋值多个元素索引默认从开始赋值特定元素赋值元素默认从开始显示引用元素都是显示数组中所有的元素指定第个元素第个元 数组 数据结构,数据序列,保存连续多个数据,可以使用索引获取相关元素 声明数组:declare -a 声明索引数组 declare -A...

    jonh_felix 评论0 收藏0
  • Linux Shell编程变量、运算符、环境配置文件

    摘要:用户自定义变量只在当前的中生效,环境变量在当前和这个的所有子中生效。命令实际过程是调用命令列出系统中所有变量的类型数值运算的方法方法一方法二注旁边一定要留空格。 一、变量 1.1 变量命名规则 开头为字符或下划线,名字中间中能有字母、数字和下划线组成; 变量的长度不超过255个字符; 变量名在有效的范围内必须是唯一的; //如再次定义则会替换上一个变量的值 在Bash中,变量的默...

    beita 评论0 收藏0
  • linux shell 脚本 入门到实战详解[⭐建议收藏!!⭐]

    文章目录 shell 入门到实战详解[⭐建议收藏!!⭐]关于作者作者介绍一、shell 入门简介1.1 什么是shell1.2 shell 编程注意事项1.3 第一个shell 脚本 hello world 二、shell 环境变量讲解2.1 shell 变量详解2.2 shell 系统变量 介绍2.3 shell 环境变量 介绍2.3.1 常见的系统环境变量 2.4 shell 用户环...

    Gemini 评论0 收藏0
  • Zsh 开发指南(第一篇 变量和语句)

    摘要:第一个是的部署成本。第三个是使用开发的好处。而为了达到可以接受的简洁程度,脚本的语法,往往比其他编程语言的更加怪异。 导读 网上关于 zsh 的文章有很多,但其中超过 95% 的文章讲如何使用和配置,写如何用 zsh 编程的文章很少,能找到的多数也是只言片语,不成系统。国外有几本讲 zsh 的书,其中也有很多内容是配置、使用、编写补全脚本等等,对编程有用的篇幅占比并不多,而且比较零散不...

    CompileYouth 评论0 收藏0
  • linux

    摘要:包括转义字符引号的使用等等。使用隐写术的指纹文件隐写术是将消息隐藏到不被认为会出现的地方的做法。在很好地执行了隐写术的片段中,任何不是预期接收者的人都能看到消息,但是却完全无法意识到消息就在那儿。 CentOS 7 时区、日期时间查看以及设置杂烩 CentOS 7 中时区、日期时间的查看、设置。包括网络时间协议 NTP 的安装和同步,Timedatectl 命令查看当前的时区、日期日期...

    lijinke666 评论0 收藏0

发表评论

0条评论

mdluo

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<