zoukankan      html  css  js  c++  java
  • Linux 之数组

    数组

    和其他编程语言一样,Shell 也支持数组。数组(Array)是若干数据的集合,其中的每一份数据都称为元素(Element)。

    Shell 并且没有限制数组的大小,理论上可以存放无限量的数据。和 C++JavaC# 等类似,Shell 数组元素的下标也是从 0 开始计数。

    获取数组中的元素要使用下标[ ],下标可以是一个整数,也可以是一个结果为整数的表达式;当然,下标必须大于等于 0。

    遗憾的是,常用的 Bash Shell 只支持一维数组,不支持多维数组。一对圆括号表示数组,数组元素之间用空格符号分割

    数组定义

    root@master:~# arr=(1 2 3 4)   //注意,赋值号=两边不能有空格,必须紧挨着数组名和数组元素。

     root@master:~# echo $arr   //默认输出数组的第一个元素
      1

    数组里面可以包含不是同一类型的数据:

    root@master:~# arr=(1 2 "my name is yjt")

    添加数组元素:

    root@master:~# arr[5]=1234
    root@master:~# echo ${arr[5]}
    1234

    给特定的元素赋值

    root@master:~# arr1=([1]=2 [3]=4 [5]=6)
    root@master:~# echo ${arr1[1]}
    2

    数组长度、元素与删除

    获取数组元素:用${数组名[下标]} 得到数组元素(下标从0开始), 下标为*或者@得到整个数组内容

    语法格式:${array_name[index]}
    其中,array_name 是数组名,index 是下标
    示例如下:
    root@master:~# echo ${arr1[1]} //获取单个元素 2 root@master:~# echo ${arr1[*]} //获取所有元素 2 4 6

      root@master:~# echo ${arr1[@]}
      2 4 6

    删除:通过unset数组[下标]可以清除相应的元素,不带下标则清除全部数据

    root@master:~# echo ${arr1[1]}
    2
    root@master:~# unset arr1[1]
    root@master:~# echo ${arr1[1]}
    
    root@master:~# unset arr1
    root@master:~# echo ${arr1[*]}

    长度:用${#数组名[@或*]} 可以得到数组长度

    root@master:~# arr=(1 2 3)
    root@master:~# echo ${#arr[*]}
    3

    获取数组元素的范围

    直接通过 ${数组名[@或*]:起始位置:长度} 获取数组给定范围内元素,返回字符串,中间用空格分开

    root@master:~# echo ${arr[*]:1:2}
    2 3

      root@master:~# echo ${arr[@]:1:2}
      2 3

     

    替换

    ${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容,如果需要修改,可以看上面例子

    root@master:~# echo ${arr[*]}
    1 2 3
    root@master:~# echo ${arr[*]/1/4}
    4 2 3

    关联数组

    Bash支持关联数组,它可以使用字符串作为数组索引,有时候采用字符串索引更容易理解。

    定义关联数组

    声明某个变量为关联数组

    root@master:~# declare -A arr_test

    将元素添加到关联数组‘

    方法一:利用内嵌索引-值列表的方法
    root@master:~# declare -A arr_test
    root@master:~# arr_test=([name]=yjt [age]=22)
    方法二:使用独立的索引-值进行赋值

      root@master:~# declare -A arr_test1
      root@master:~# arr_test1[name]=yjt
      root@master:~# arr_test1[age]=22

    列出数组索引

    每一个数组都有一个索引用于查找。使用${!数组名[@或者*]}获取数组的索引列表

    root@master:~# echo ${arr_test[*]}
    yjt 22
    root@master:~# echo ${!arr_test[*]}
    name age

    获取所有的键值对

    #!/bin/bash
    declare -A arr_yjt
    arr_yjt=([name]=yjt [age]=22)
    for key in ${!arr_yjt[*]}
    do
        echo "$key --->  ${arr_yjt[$key]}"
    done

    保存文件到yjt.sh

    执行脚本文件:

    root@master:~# bash  yjt.sh 
    name --->  yjt
    age --->  22
  • 相关阅读:
    JSP—简介
    Dream
    树状数组模板
    夜未央Test1题解
    夜未央Test1
    并查集模板
    给即将面临Noip的二班同学
    USACO chapter1
    二叉堆模板
    线段树模板
  • 原文地址:https://www.cnblogs.com/yjt1993/p/11095660.html
Copyright © 2011-2022 走看看