你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

linux shell数组方面一些操作的总结

[复制链接]
gaosmile 发布时间:2020-5-5 22:55
正文   
- T& ^' F" ~' C+ v
linux shell在编程方面比windows 批处理强大太多,无论是在循环、运算。已经数据类型方面都是不能比较的。下面是个人在使用时候,对它在数组方面一些操作进行的总结。

% h4 @+ C+ C, ~0 V4 m+ v; i
1.数组定义
[chengmo@centos5 ~]$ a=(1 2 3 4 5)
[chengmo@centos5 ~]$ echo $a
6 O' a4 W0 P0 Y; O- l6 b
一对括号表示是数组,数组元素用“空格”符号分割开。
8 H3 q/ Y) }$ d6 z5 a
2.数组读取与赋值
2 w% _5 [2 D9 q. L
  • 得到长度:
    / |( ]1 ]" p) l% C

8 L4 \9 \0 ^5 W5 M0 {) Y- I/ N
[chengmo@centos5 ~]$ echo ${#a[@]}
5
5 T% ^* M: h, ]6 Z6 T; e5 U6 {, f
用${#数组名[@或*]} 可以得到数组长度

! G9 X: o1 u! V* s
  • 读取:
    / R2 ~2 m1 x$ v2 I4 M
! E- m; |4 S4 m) w
[chengmo@centos5 ~]$ echo ${a[2]}
3
[chengmo@centos5 ~]$ echo ${a
  • }
  • 1 2 3 4 5

    , [; Q( A: n+ V3 E5 b! i, E$ u% R* a9 ?
    用${数组名[下标]} 下标是从0开始 下标是:*或者@ 得到整个数组内容

    1 Z5 {) \0 h# t
    • 赋值:

      ! f" J; ?  ^6 Q! Q# f% _: l+ {
    1 M  x  o$ [$ u% v
    [chengmo@centos5 ~]$ a[1]=100
    [chengmo@centos5 ~]$ echo ${a
  • }
  • 1 100 3 4 5
    [chengmo@centos5 ~]$ a[5]=100
    [chengmo@centos5 ~]$ echo ${a
  • }
  • 1 100 3 4 5 100

    / o1 ?7 ]9 x1 Y$ x$ r2 F
    直接通过 数组名[下标] 就可以对其进行引用赋值,如果下标不存在,自动添加新一个数组元素
    - ?" X. q4 L/ W  _! v
    • 删除:
      7 H# w- A. C$ h4 R% A/ T/ a
    0 ^1 V. b0 F; L; \7 C
    [chengmo@centos5 ~]$ a=(1 2 3 4 5)
    [chengmo@centos5 ~]$ unset a
    [chengmo@centos5 ~]$ echo ${a
  • }
  • [chengmo@centos5 ~]$ a=(1 2 3 4 5)
    [chengmo@centos5 ~]$ unset a[1]
    [chengmo@centos5 ~]$ echo ${a
  • }
  • 1 3 4 5
    [chengmo@centos5 ~]$ echo ${#a
  • }
  • 4

    + b* q# s( l: p! P( ]
    直接通过:unset 数组[下标] 可以清除相应的元素,不带下标,清除整个数据。
    " N5 m5 m0 ]2 q& d" a5 j3 c
    3.特殊使用
    + R# }) y9 A. a
    • 分片:

      / l& t: I* t3 [+ D
    + B5 K+ ^: i/ k) z
    [chengmo@centos5 ~]$ a=(1 2 3 4 5)
    [chengmo@centos5 ~]$ echo ${a[@]:0:3}
    1 2 3
    [chengmo@centos5 ~]$ echo ${a[@]:1:4}
    2 3 4 5
    [chengmo@centos5 ~]$ c=(${a[@]:1:4})
    [chengmo@centos5 ~]$ echo ${#c[@]}
    4
    [chengmo@centos5 ~]$ echo ${c
  • }
  • 2 3 4 5

    , r/ g0 K2 A7 ^, v
    直接通过 ${数组名[@或*]:起始位置:长度} 切片原先数组,返回是字符串,中间用“空格”分开,因此如果加上”()”,将得到切片数组,上面例子:c 就是一个新数据。

    * K" a* @4 Y: V
    • 替换:
      , P9 C$ e0 [( Q3 n( g. {* f" D
    1 _4 {5 ]/ _  p
    [chengmo@centos5 ~]$ a=(1 2 3 4 5)
    [chengmo@centos5 ~]$ echo ${a[@]/3/100}
    1 2 100 4 5
    [chengmo@centos5 ~]$ echo ${a[@]}
    1 2 3 4 5
    [chengmo@centos5 ~]$ a=(${a[@]/3/100})
    [chengmo@centos5 ~]$ echo ${a[@]}
    1 2 100 4 5

    2 L1 S) z  U' j( J" ?
    调用方法是:${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容,如果需要修改,可以看上面例子,重新定义数据。
    , A  Z) N# ?5 m! J
    从上面讲到的,大家可以发现linux shell 的数组已经很强大了,常见的操作已经绰绰有余了。

    / Y& t  v5 J  F) L
    赞 收藏 评论0 发布时间:2020-5-5 22:55

    举报

    0个回答

    所属标签

    关于
    我们是谁
    投资者关系
    意法半导体可持续发展举措
    创新与技术
    意法半导体官网
    联系我们
    联系ST分支机构
    寻找销售人员和分销渠道
    社区
    媒体中心
    活动与培训
    隐私策略
    隐私策略
    Cookies管理
    行使您的权利
    官方最新发布
    人形机器人运动控制、感知与智能配电
    半导体创新技术与应用方向
    EE架构与软件定义汽车
    12V/48V 汽车智能配电(SPD)
    区域控制单元(ZCU)与分区架构
    关注我们
    st-img 微信公众号
    st-img 手机版