| 会员登录 立即注册

打印 上一主题 下一主题

软件开发 | Bash 基础知识系列 #5:在 Bash 中使用数组

[复制链接]
跳转到指定楼层
楼主
3AAA 发表于 2023-7-22 17:55:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
楼主
3AAA
2023-7-22 17:55:30 2261 0 看楼主


本章将介绍如何在 Bash Shell 脚本中使用数组。学习添加元素、删除元素和获取数组长度。

在本系列的前面部分中,你了解了变量。变量中可以有单个值。

数组内部可以有多个值。当你必须一次处理多个变量时,这会使事情变得更容易。你不必将各个值存储在新变量中。

因此,不要像这样声明五个变量:
distro1=Ubuntudistro2=Fedoradistro3=SUSEdistro4=Arch Linuxdistro5=Nix
你可以在单个数组中初始化它们所有:
distros=(Ubuntu Fedora SUSE "Arch Linux" Nix)
与其他一些编程语言不同,你不使用逗号作为数组元素分隔符。

那挺好的。让我们看看如何访问数组元素。

在 Bash 中访问数组元素


使用索引(数组中的位置)访问数组元素。要访问索引 N 处的数组元素,请使用:
${array_name[N]}

? 与大多数其他编程语言一样,Bash Shell 中的数组从索引 0 开始。这意味着第一个元素的索引为 0,第二个元素的索引为 1,第 n 个元素的索引为 n-1。

因此,如果你想打印 SUSE,你将使用:
echo ${distros[2]}


? ${之后或}之前不能有任何空格。你不能像${ array[n] }那样使用它。


一次访问所有数组元素


假设你要打印数组的所有元素。

你可以一一使用 echo ${array[n]}但这确实没有必要。有一个更好更简单的方法:
${array
  • }
    这将为你提供所有数组元素。



    在 Bash 中获取数组长度


    如何知道数组中有多少个元素? 有一个专门的方法 在 Bash 中获取数组长度:
    ${#array_name[@]}
    就这么简单,对吧?



    在 Bash 中添加数组元素


    如果必须向数组添加其他元素,请使用 +=运算符将元素追加到 Bash 中的现有数组:
    array_name+=("new_value")
    这是一个例子:



    ? 追加元素时使用 很重要。

    你还可以使用索引将元素设置在任何位置。
    array_name[N]=new_value
    但请记住使用正确的索引编号。如果在现有索引上使用它,新值将替换该元素。

    如果你使用“越界”索引,它仍会添加到最后一个元素之后。例如,如果数组长度为 6,并且你尝试在索引 9 处设置新值,则该值仍将作为最后一个元素添加到第 7 个位置(索引 6)。



    删除数组元素


    你可以使用 Shell 内置的 unset通过提供索引号来删除数组元素:
    unset array_name[N]
    这是一个示例,我删除了数组的第四个元素。



    你还可以通过 unset 来删除整个数组:
    unset array_name

    ? Bash 中没有严格的数据类型规则。你可以创建一个同时包含整数和字符串的数组。


    ?? 练习时间


    让我们练习一下你所学到的有关 Bash 数组的知识。

    练习 1:创建一个 Bash 脚本,其中包含五个最佳 Linux 发行版的数组。全部打印出来。

    现在,用 “Hannah Montanna Linux” 替换中间的选择。

    练习 2:创建一个 Bash 脚本,该脚本接受用户提供的三个数字,然后以相反的顺序打印它们。

    预期输出:
    Enter three numbers and press enter12 23 44Numbers in reverse order are: 44 23 12
    我希望你喜欢通过本系列学习 Bash Shell 脚本。在下一章中,你将学习如何使用 if-else。敬请关注。

    (题图:MJ/09477e2f-2bf9-4fdf-bc1e-c894a068adf2)

    via: https://itsfoss.com/bash-arrays/

    作者:Abhishek Prakash选题:lkxed译者:geekpi校对:wxy

    本文由 LCTT原创编译,Linux中国荣誉推出
  • 回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    3AAA 当前离线
    白银会员

    查看:2261 | 回复:0

    关于我们  |   侵权投诉受理  |   联系我们  |   Archiver  |  
    免责声明:邳州信息网所有言论只代表发表者个人观点,与本站无关
    Copyright © 2009-2025 pzxxw.com 版权所有:邳州金银杏文化传媒有限公司  

    苏公网安备 32038202000401号

    快速回复 返回顶部 返回列表