当前位置: 首页 > Linux

Zsh开发指南(Part5Arrays)

时间:2023-04-06 22:38:26 Linux

介绍了解了结构比较简单的字符串之后,我们来看比较复杂的数组。其实在zsh中也可以把字符串当做字符数组来操作,只是很少有场景需要把字符串当做数组来处理。本文主要讲的是字符串数组,它比单个字符串要复杂。在实际脚本编写中,很少需要处理单个字符串。经常需要处理来自各个地方的大量文本,不可避免地要用到数组。善用数组将使文本处理更有效率。本文仅介绍数组的基本用法。数组定义数组可以直接赋值使用,无需事先声明。等号和括号之间不能有空格,括号内的元素之间用空格隔开。%array=(abccccdddd)#使用$array访问数组的所有元素,输出时元素以空格分隔%echo$arrayabccccdddd#使用print-l每行输出一个元素%print-l$arrayabccccdddd#输出数组中的元素个数,用法同字符串长度%echo$#array4#包含一个带空格的字符串%array=(a"bcccc"dddd)%print-l$arrayabccccdddd#可以换行赋值,但是如果行中间有空格,还是需要加引号%array=(>a>bb>"ccc">dddd>)元素读写%array=(abccccdddd)#用法和字符串的个数相同,从1%开始算echo$array[3]ccc#-1还是最后一个元素,-2是倒数第二个元素,依此类推%echo$array[-1]dddd%array[3]=CCC#如果赋值的内容是空括号,删除元素%array[2]=()%print-l$arrayaCCCdddd#使用+=向数组中添加一个新元素%array+=eeeee%print-l$arrayaCCCddddeeeee#使用unset删除整个数组%unsetarray#array变量变为undefined%echo$+array0Arraysplicing%array1=(abcd)%array2=(1234)#用+=拼接数组%array1+=(efg)%echo$array1abcdefg#拼接另一个数组,括号不能省略,否则array1会转成字符串%array2+=($array1)%echo$#array211#去掉引号后array1会转为A字符串%array2+=$array1%echo$#array212%echo$array2[12]abcdefg#字符串可以直接拼接成数组并转换成数组%str=abcd%str+=(1234)%echo$#str2数组遍历%array1=(abbcccdddd)%array2=(123)#用for直接遍历数组,括号不能省略%fori($array1){>echo$i>}abbcccdddd#括号内可以放多个数组,依次遍历%fori($array1$array2){>echo$i>}abbcccdddd123arrayslicearrayslicearrayslice和stringslice操作方法完全一样%array=(abbcccdddd)%echo$array[2,3]bbccc#你仍然可以多对多替换元素%array[3,-1]=(1234)%echo$arrayabb1234#你也可以使用另一种语法,它不是推荐使用%echo${array:0:3}abb1元素搜索数组的元素搜索方法与字符串的子串搜索语法相同。%array=(abbcccddddccc)#用小i从左到右输出第一个匹配到的元素位置%echo$array[(i)ccc]3#如果没有找到,返回数组大小+1%echo$array[(i)xxx]6#使用大I从右到左输出第一个匹配到的元素位置%echo$array[(I)ccc]5#没有找到则返回0%echo$array[(I)xxx]0#可以用大I判断是否有元素%(($array[(I)dddd]))&&echogoodgood%(($array[(I)xxx]))&&echogood%array=(aaabbbaabbbc)#n:2:从指定位置开始搜索%echo${array[(in:2:)aa*]}3元素排序%array=(aaCCCbDDe000AA3aa22)#升序排列,从小到大%echo${(o)array}000223aaaaAAbCCCDDe#降序排列,从大到小%echo${(O)array}eDDCCCbAAaaaa322000#如果加上i,则不区分大小写%echo${(oi)array}000223aaAAaabCCCDDe%array=(ccaaab1211590)#如果加上n,则为数字顺序Row%echo${(on)array}1290115aaabcc#oa用于反转数组元素的排列顺序%echo${(Oa)array}9011512baaacc去除重复元素%array=(dddabbacccbbddd)%echo${(u)array}dddabbccc从字符串构造数组%str="abbcccdddd"#${=str}可以将str的内容按空格划分成一个数组%array=(${=str})%print-l$arrayabbcccdddd%str="a\nbb\nccc\ndddd"#如果需要修改分隔符,你可以设置SH_WORD_SPLIT变量%SH_WORD_SPLIT="\n"%array=(${=str})%print-l$arrayabbcccdddd从文件构造一个数组test.txt。内容abbcccdddd每行一个元素。#f的作用是把字符串分隔成一个数组,用换行符#双引号不能省略,否则会变成字符串,引号也可以加上${}%array=(${(f)"$(