zoukankan      html  css  js  c++  java
  • Shell 数组

    Shell中数据类型不多,比如说字符串,数字类型,数组。数组是其中比较重要的一种,同时Shell中的数组不像JAVA/C,只能是一维数组,没有二维数组;数组元素大小无约束,也无需先定义数组的元素个数;但其索引则像JAVA/C/Python,从0开始,下面是我学习过程的一些总结。

    定义:

      shell的定义和python相似格式如下

    # 变量名=(值 值 值)   值之间用空格或换行隔开
    arr=(1 2 3 4)
    
    # 逐个赋值
    arr[o]=1
    arr[1]=2
    arr[2]=3
    arr[3]=4
    
    arr=([o]=1 [1]=2 arr[2]=3 arr[3]=4)
    

    数组的基本操作

    获取数组

    • 读取某个下标的值:${数组名[下标]}

    • 获取数组长度:${#数组名[@/*]} 即${#数组名[*]}或${#数组名[@]}

    • 求元素长度: ${#数组名[index]}

      ​ expr length ${数组名[index]}

      ​ ${数组名[index]} | wc -L

    添加数组

    • 直接添加 数组[index]=值 index大于数组长度则在最后添加
    • 利用旧数组创建新的 newArrays=(${old[*]} 值)

    修改数组

    • 直接修改 数组[index]=值

    删除数组

    • 删除元素 unset 数组[index]
    • 删除数组 unset 数组

    数组的截取

       和字符串相似,可以和字符串的方法对比着看。

    假设有变量

    arr=(1 2 3 4 5 6 )
    var=(book food)
    

    1. # 号截取,从左到右进行最短匹配查找。

    echo ${var[@]#b*o}
    

    其中 var 是变量名,# 号是运算符,b*o 表示从左边开始查找

    即删除 bo

    结果是 :ok food

    2. ## 号截取,从左到右进行最长匹配查找

    echo ${var##b*o} 
    

    即删除boo

    结果是 k food

    3. %号截取,从右到左进行最短匹配查找

    echo ${var%o*d}
    

    %/* 表示从右边开始,删除第一个 od

    结果是:book fo

    4. %% 号截取,删从右到左进行最长匹配查找

    echo ${var%%o*d}
    

    %% 表示从右边开始,删除最后(最右边边)一个 o0d号

    结果是:book f

    5. 从左边第几个字符开始,及字符的个数

    echo ${arr[@]:0:2}
    echo ${arr[@]::2} #两个一样
    

    其中的 0 表示左边第一个字符开始,2 表示字符的总个数。

    结果是:1 2

    6. 从左边第几个字符开始,一直到结束。

    echo ${arr[@]:1}
    

    其中的 1表示左边第2个字符开始,一直到结束。

    结果是 :3 4

    7. 从右边第几个字符开始,及字符的个数

    echo ${var[@]:(-2):2}
    

    其中的 -2表示右边算起第2个字符开始,2表示字符的个数。

    结果是:3 4

    8.元素切片

    names=(Jerry Alice David Wendy)
    echo $(names[0]:0) # 从0开始取所有   Jerry
    echo $(names[0]:1:2) # 从0开始取2个 er
    echo $(names[0]:6) #超出显示空行
    
    

    数组替换

    • ${array[@]/x/y} 最小匹配替换,每个元素只替换一次
    • ${array[@]//x/y} 最大匹配替换,每个元素可替换多次
    • ${array[@]/x/} 最小匹配删除,只删除一个符合规定的元素
    • ${array[@]//x/} 最大匹配删除,可删除多个符合规定的元素

    这个和前面相似就不举例子了。

  • 相关阅读:
    windbg学习.expr和masm表达式
    ThisCall调用分析
    windbg学习 gc j(Execute IfElse).if
    windbg学习¥{} Alias Interpreter 别名解释器
    windbg学习!vadump和.hh和!vprotc
    windbg学习 .lines
    windbg学习条件断点
    $<, $><, $$<, $$><, $$>a< (Run Script File)
    windbg学习?? 和 ?
    vimbook–OPL –official publications library
  • 原文地址:https://www.cnblogs.com/yangliguo/p/8006564.html
Copyright © 2011-2022 走看看