Bash 数组与切片:从 `introduction-to-bash-scripting` 电子书掌握 Bash 数组的声明、访问与子串切割

发布时间:2026/9/17 21:24:06
Bash 数组与切片:从 `introduction-to-bash-scripting` 电子书掌握 Bash 数组的声明、访问与子串切割
Bash 数组与切片从introduction-to-bash-scripting电子书掌握 Bash 数组的声明、访问与子串切割【免费下载链接】introduction-to-bash-scriptingFree Introduction to Bash Scripting eBook项目地址: https://gitcode.com/GitHub_Trending/in/introduction-to-bash-scripting本篇技术指南以开源电子书 Introduction to Bash Scripting作者 Bobby Iliev中的 法语章节《Les Arrays en Bash》 为主体并结合 英文版对应章节 进行补全与深化系统地讲解 Bash 数组的核心概念与实战技巧。读完本文你将掌握如何声明并初始化一个 Bash 数组、如何通过数值索引访问单个元素与末位元素、如何用${array[]}取出全部元素、如何用${#array[]}统计元素个数以及如何利用参数展开Parameter Expansion实现数组切片与字符串子串切割并理解其中容易踩坑的语法细节。一、数组是什么与普通变量、命令行参数的区别如果你写过任何编程语言大概率对数组并不陌生。但即使你完全不是开发者只需要记住最关键的一点普通变量一个名字只能保存一个值而数组可以在同一个名字下保存多个值。这与本电子书前面的章节形成了清晰的递进关系变量章节 中nameDevDojo这样一次只能存一个值参数章节 中命令行参数通过$1、$2、$访问已经体现了一组值的思想数组则把这种一组值正式收纳进一个变量名中并且访问语法与$高度相似都使用表示全部元素。二、声明与初始化数组在 Bash 中初始化一个数组只需要把以空格分隔的多个值用圆括号()包裹起来赋值给变量名即可mon_array(valeur 1 valeur 2 valeur 3 valeur 4)要点等号两侧不能有空格与 变量赋值 的规则一致每个值之间用空格分隔因此如果某个值本身包含空格必须用引号包裹例如上面的valeur 1数组下标从0开始计数。三、访问数组元素索引、与#要访问数组中的元素需要通过数值索引来引用。这里有一个必须牢记的语法要点必须使用花括号{}将数组名与下标包裹起来在数组展开时最好同时加上双引号。以下均以上面的mon_array4 个元素为例1. 访问单个元素echo ${mon_array[1]}输出valeur 2索引从0开始所以[1]取到的是第二个元素。2. 访问最后一个元素负索引echo ${mon_array[-1]}输出valeur 4Bash 4.0 支持负索引-1表示最后一个元素-2表示倒数第二个以此类推。这是快速取末尾元素的常用技巧。3. 取出全部元素echo ${mon_array[]}输出valeur 1 valeur 2 valeur 3 valeur 4与命令行参数中$的语义一致${array[]}会把数组中的所有元素一次性展开。遍历数组、把数组传给其他命令时这是最常用的写法。4. 统计元素个数#echo ${#mon_array[]}输出4在数组名前加上井号#返回的是数组中元素的总数。注意这里的#与注释没有任何关系它出现在参数展开内部是求长度的操作符。练习建议原文档特别强调请务必亲手运行上面的代码并换用不同的值多加练习直到能准确预判每一次展开的结果。四、数组切片区间取值Bash 本身并不提供像 Python 那样原生的数组切片语法但借助参数展开的组合可以非常接近地实现区间取值。英文版章节给出了一个完整、可直接运行的示例ebook/en/content/008-bash-arrays.md#!/bin/bash array(A B C D E) # 打印整个数组 echo ${array[]} # 输出: A B C D E # 访问单个元素 echo ${array[1]} # 输出: B # 打印一段区间元素需要 Bash 4.0 echo ${array[]:1:3} # 输出: B C D # 从某个索引打印到末尾 echo ${array[]:3} # 输出: D E语法解读${array[]:start:length}从下标start开始取出length个元素${array[]:start}从下标start一直取到数组末尾与字符串切片不同这里的第二个数字是长度不是结束下标区间切片需要Bash 4.0支持。实践原则处理数组时永远使用[]来指代所有元素并且把整个参数展开用双引号包起来这样才能保留数组元素内部的空格避免单词被意外拆分。五、字符串切片子串切割语法与完整示例除了数组Bash 还支持对字符串直接做切片提取子串。基础语法为${string:start:length}其中start起始索引从0开始length最多提取的字符数。法语版章节用一组字母示例演示了这一行为。这里我们采用英文版更规范的写法每个字母作为独立元素声明原法语写法及输出结果同样保留如下便于对照示例 1从索引 0 开始截取 2 个字符#!/bin/bash textABCDE echo ${text:0:2}输出AB0表示从第一个字符开始2表示最多取 2 个字符到下标 2 为止、不包含下标 2。示例 2省略起始索引默认从 0 开始#!/bin/bash textABCDE echo ${text::5}输出ABCDE当start被省略时默认从索引0开始。法语原文档对应的写法是b${lettres::5}语义完全相同。示例 3只给起始索引一直取到末尾#!/bin/bash textABCDE echo ${text:3}输出DE只写:3而不写长度表示从索引3一直截取到字符串结尾含结尾。更多边界示例#!/bin/bash textABCDE # 从索引 1 开始最多取 3 个字符 echo ${text:1:3} # 输出: BCD # 长度超出剩余字符时截到末尾即停不报错 echo ${text:3:3} # 输出: DE只剩 2 个字符再看一个真实文本的例子textHello, World! # 从索引 7 开始取 5 个字符 echo ${text:7:5} # 输出: World # 从索引 7 开始要 10 个字符实际只剩 6 个 echo ${text:7:10} # 输出: World!六、两个关键易错点1. 第二个数字是长度而非结束下标这与 Python 等语言的切片语义不同。在 Bash 中${text:3:3}是从下标 3 开始最多取 3 个字符而不是取到下标 3 为止。当指定的长度超出字符串剩余长度时Bash 不会报错而是直接截到字符串末尾。这一特性在你不确定目标字符串确切长度时尤其有用。2. 引号与花括号不能省数组展开必须使用花括号${arr[...]}并且强烈建议整个展开用双引号包裹${arr[]}。省略引号会导致包含空格的元素被 Bash 按空白拆分成多个词从而破坏数据完整性。英文版章节对此有明确提示ebook/en/content/008-bash-arrays.md。3. 相邻字符串会被拼接原法语示例的陷阱法语版章节中的示例写作lettres( ABCDE )这种相邻字符串字面量在 Bash 中会被拼接成单个词ABCDE因此该数组实际只有一个元素随后的${lettres:0:2}本质上是字符串切片。本文按英文版规范写法array(A B C D E)声明独立元素避免这一歧义——如果你对照法语原文运行请留意这一差异。七、仓库中的验证与配套资源本仓库对书中的 Bash 代码块做了工程化的质量保障脚本 scripts/shellcheck-ebook.sh 会从各语言版本的 Markdown 章节中提取所有 bash 代码块逐一交给shellcheck静态检查并针对教学片段场景排除了诸如 SC2034变量看似未使用、SC2154变量看似未赋值、SC2145参数混用字符串与数组等规则。这意味着本文中出现的数组与切片示例均属于通过 shellcheck 校验的代码模式你可以用同样的方式自检自己的脚本例如shellcheck会提醒你为数组展开加上引号避免 SC2068 之类的隐患。文中涉及的相邻章节可继续阅读Bash 变量法语版变量赋值与${name}展开的规则是理解数组语法的基础Bash 命令行参数$与数组${arr[]}的语义对照Bash 结构法语版#!/bin/bashshebang 与脚本执行方式英文版数组章节本文示例的规范写法与更完整的注释版本。八、小结需求语法结果以(A B C D E)为例取单个元素${array[1]}B取末位元素${array[-1]}E取全部元素${array[]}A B C D E统计元素个数${#array[]}5数组区间切片Bash 4.0${array[]:1:3}B C D字符串子串${text:0:2}ABBash 数组与切片是编写自动化脚本时的高频基础能力无论是遍历服务器列表、解析命令行传入的多值参数还是从日志字符串中截取关键字段上述语法都是不可或缺的积木。建议打开终端把本文每个示例逐行敲一遍并尝试用不同的索引、长度和包含空格的值做组合实验直到你对参数展开的求值结果了然于胸。【免费下载链接】introduction-to-bash-scriptingFree Introduction to Bash Scripting eBook项目地址: https://gitcode.com/GitHub_Trending/in/introduction-to-bash-scripting创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考