shell 数组操作

Posted on Posted in bash
Tips: 本文创建于2016年4月7日,已超过 2 年,内容或图片可能已经失效!

定义一个数组

  1. array_name=(value0 value1 value2 value3)  
  2. array_name=(  
  3. value0  
  4. value1  
  5. value2  
  6. value3  
  7. )  
  8. array_name[0]=value0  
  9. array_name[1]=value1  
  10. array_name[2]=value2  

可以不使用连续的下标,而且下标的范围没有限制。

使用@ 或 * 可以获取数组中的所有元素

  1. ${array_name[*]}  
  2. ${array_name[@]}  

取得数组元素的个数

  1. length=${#array_name[@]}  

或者

  1. length=${#array_name[*]}  

取得数组单个元素的长度

  1. lengthn=${#array_name[n]}  

添加元素

  1. array_name=("${array_name[@]}" "value_new")  
  2. echo ${array_name[@]}  
  3. array_name[${#array_name[@]}]="value_new2"  

遍历数组

  1. for item in ${array_name[@]}  
  2. do  
  3. echo $item  
  4. done  

销毁

  1. # 销毁整个数组   
  2. unset array_name  
  3. unset array_name[*]  
  4. # 销毁一个元素   
  5. unset name[下标]  

扩展-替换
/xx/yy 对每个元素只替换一次
//xx/yy 对每个元素替换多次
//x/ 删除匹配内容

  1. $ echo ${array[@]/e/E} # three第二个e没替换   
  2. onE two thrEe four fivE   
  3. $ echo ${array[@]//e/E} # three第二个e没替换   
  4. onE two thrEE four fivE   
  5. $ echo ${array[@]//e/} # 最大匹配删除   
  6. on two thr four fiv   
  7. $ echo ${array[@]/e/} # 最小匹配删除   
  8. on two thre four fiv  

/#xx/yy front-end匹配(从左向右)
/%xx/yy back-end匹配(从右向左)

  1. $ echo ${array[@]/#o/O} # two的o没替换   
  2. One two three four five   
  3. $ echo ${array[@]/%o/O} # one的o没替换   
  4. one twO three four five  

用函数替换

  1. $ newstr() {   
  2. > echo -n "!!!"   
  3. > }   
  4. $ echo ${array[@]/%e/$(newstr)}   
  5. onXX two threXX four fivXX  

其他

read命令支持以-a参数从标准输入读入一个数组

  1. read -a name   
  2. 11 22 33   
  3. $ echo ${name[1]}   
  4. 22  
» 转载请注明来源:呢喃 » shell 数组操作