zoukankan      html  css  js  c++  java
  • shell字符串数组

    数组

      声明数组

        declare -a ARRAY_NAME 

        declare -A ARRAY_NAME: 关联数组 

        注意:两者不可相互转换 

      数组名和下标(索引)

        索引:编号从0开始,属于数值索引 

        注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引, bash4.0版本之后开始支持 

        bash的数组支持稀疏格式(索引不连续) 

    数组赋值

          (1) 一次只赋值一个元素 

                 ARRAY_NAME[INDEX]=VALUE  weekdays[0]="Sunday"  weekdays[4]="Thursday" 

          (2) 一次赋值全部元素 

                ARRAY_NAME=("VAL1" "VAL2" "VAL3" ...) 

    1 filename=(`ls /root/*.sh`)
    2 
    3 echo ${filename[@]}
    4 /root/99.sh /root/a.sh /root/b.sh /root/caluid.sh /root/creat10user.sh /root/diskcheck.sh /root/g1.sh /root/getuserinfo.sh /root/guess.sh /root/selectmenu.sh /root/shift.sh /root/testfor.sh /root/trap.sh /root/whiledf.sh
    View Code

         

          (3) 只赋值特定元素 

                ARRAY_NAME=([0]="VAL1" [3]="VAL2" ...) 

          (4) 交互式数组值对赋值   read -a ARRAY 

    引用数组

        ${ARRAY_NAME[INDEX]}  注意:省略[INDEX]表示引用下标为0的元素 

        引用数组所有元素: 

             ${ARRAY_NAME[*]}          ${ARRAY_NAME[@]} 

        数组的长度(数组中元素的个数): 

            ${#ARRAY_NAME[*]}         ${#ARRAY_NAME[@]} 

       删除数组中的某元素:    导致稀疏格式 unset ARRAY[INDEX]

       删除整个数组: unset ARRAY

    数组切片

    引用数组中的元素: 

           数组切片:${ARRAY[@]:offset:number}   

            offset: 要跳过的元素个数   

            number: 要取出的元素个数   取偏移量之后的所有元素      ${ARRAY[@]:offset}

            向数组中追加元素:  ARRAY[${#ARRAY[*]}]=value 

    字符串

       字符串切片的示例

     1 [root@centos7 ~]# str=`echo {a..z}|tr -d " "`
     2 [root@centos7 ~]# echo $str
     3 abcdefghijklmnopqrstuvwxyz
     4 [root@centos7 ~]# str2=`echo {a..z}`
     5 [root@centos7 ~]# echo $str2
     6 a b c d e f g h i j k l m n o p q r s t u v w x y z
     7 [root@centos7 ~]# echo ${#str}
     8 26
     9 [root@centos7 ~]# echo ${#str2}
    10 51
    11 [root@centos7 ~]# echo ${str:3}
    12 defghijklmnopqrstuvwxyz
    13 [root@centos7 ~]# echo ${str:3:4}
    14 defg
    15 [root@centos7 ~]# echo ${str: -4}
    16 wxyz
    17 [root@centos7 ~]# echo ${str: -4:-2}
    18 wx
    19 [root@centos7 ~]# echo ${str: -4:1}
    20 w
    21 [root@centos7 ~]# echo ${str: -4:3}
    22 wxy
    View Code

      字符串模式取子字符串

     1 [root@centos7 ~]# line=`head -n1 /etc/passwd`
     2 [root@centos7 ~]# echo $line
     3 root:x:0:0:root:/root:/bin/bash
     4 [root@centos7 ~]# echo ${line#*:}
     5 x:0:0:root:/root:/bin/bash
     6 [root@centos7 ~]# echo ${line##*:}
     7 /bin/bash
     8 [root@centos7 ~]# echo ${line%*:}
     9 root:x:0:0:root:/root:/bin/bash
    10 [root@centos7 ~]# echo ${line%:*}
    11 root:x:0:0:root:/root
    12 [root@centos7 ~]# echo ${line%%:*}
    13 root
    14 [root@centos7 ~]# disk="/dev/sda3        30G   82M   30G   1% /data"
    15 [root@centos7 ~]# echo $disk
    16 /dev/sda3 30G 82M 30G 1% /data
    17 [root@centos7 ~]# echo ${disk%% *}
    18 /dev/sda3
    19 [root@centos7 ~]# 
    View Code

     字符串的搜索替代

        ${var/pattern/substr}:查找var所表示的字符串中,第一次被pattern所匹 配到的字符串,以substr替换之 

        ${var//pattern/substr}: 查找var所表示的字符串中,所有能被pattern所匹 配到的字符串,以substr替换之 

        ${var/#pattern/substr}:查找var所表示的字符串中,行首被pattern所匹 配到的字符串,以substr替换之 

        ${var/%pattern/substr}:查找var所表示的字符串中,行尾被pattern所匹 配到的字符串,以substr替换之 

      字符串的搜索删除

         ${var/pattern}:删除var所表示的字符串中第一次被pattern所匹配到的字符串 

         ${var//pattern}:删除var所表示的字符串中所有被pattern所匹配到的字符串 

         ${var/#pattern}:删除var所表示的字符串中所有以pattern为行首所匹配到的字符串 

         ${var/%pattern}:删除var所表示的字符串中所有以pattern为行尾所匹配到的字符串

      字符大小写转换 

         ${var^^}:把var中的所有小写字母转换为大写 

         ${var,,}:把var中的所有大写字母转换为小写 

    eval命令

        eval    首先会扫描替换命令中的所有变量,然后再去执行替换后的命令

        eval  命令将会首先扫描命令行进行所有的置换,然后再执行该命令.该命令适用于那些一次扫描无法实现其功能的变量.该命令对变量进行两次扫描 

     1 [root@centos7 ~]# n=10
     2 [root@centos7 ~]# echo {1..$n}
     3 {1..10}
     4 [root@centos7 ~]# eval echo {1..$n}
     5 1 2 3 4 5 6 7 8 9 10
     6 [root@centos7 ~]# CMD=whoami
     7 [root@centos7 ~]# echo $CMD
     8 whoami
     9 [root@centos7 ~]# eval $CMD
    10 root
    11 [root@centos7 ~]# 
    View Code

    变量赋值方式

      

  • 相关阅读:
    传值与传引用
    【M10】在构造方法内阻止资源泄漏
    【M9】利用destructors避免泄漏资源
    C++异常
    【M5】对定制的“类型转换函数”保持警觉
    方法调用的方式
    Fatal Error: TXK Install Service oracle.apps.fnd.txk.config.ProcessStateException: OUI process failed : Exit=255 See log for details
    here was insufficient free space available after evicting expired cache entries
    python
    Python Decorator 和函数式编程
  • 原文地址:https://www.cnblogs.com/yxh168/p/9027718.html
Copyright © 2011-2022 走看看