博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell 中数组学习
阅读量:4697 次
发布时间:2019-06-09

本文共 2089 字,大约阅读时间需要 6 分钟。

     因为应用shell的时间不是太长。对于数组在实际项目中没有接触过。今天在需要把相似于:a=1,2,3,4这种东西转换。

之前用的方法是用awk,分别取出。所以今天想是否有更好更简洁的方法----就想到数组了。

     先解决样例中的问题,比如

my_num="one,two,three,four"

     将其切割开:

OLD_IFS="$IFS" IFS="," arr=($my_num) IFS="$OLD_IFS" for s in ${arr[@]} do     echo "$s" done

输出为:

onetwothreefour

以下是比較具体的关于数组的知识:

一、数组和字符串

Array[3] = "a b c" echo $Array[1]  输出b,

str=“a b c” Array = ($str) echo$Array[1],相同输出b,要注意: Array = ($str)中的右值的括号不能缺

上面这个就是我们常说的把字符串放到一个数组中。也能够理解为动态数组。比C和C++简单多了

计算字符串长度可用的三种方法:

echo “$str”|awk '{print length($0)}'

expr length “$str”

echo “$str”|wc -c

可是第三种得出的值会多1,可能是把结束符也计算在内了

推断字符串为空的方法有三种:

if [ "$str" =  "" ] 
if [ x"$str" = x ]
if [ -z "$str" ] 
二、其它类型的数组
arr=(123 34 3 5) echo $arr。输出123。在这里等同于echo ${arr[0]};
echo ${arr[1]},输出34,注意格式,除了首地址。必需要加上{},否则会出错
三、数组的长度和遍历
length=${#array[@]}----数组的长度,这里的长度是最大下标
echo ${array[@]}-------输出数组所有元素
array[1]=5--------------向数组的某个元素赋值和标c的语法一样
echo ${array[@]:1:2}---输出的是array[0]和array[1]的值
echo ${array[@]:2}-----输出数组第三个元素以后的值
echo ${array[@]::2}-----输出数组下标小于2的值
$ echo ${#array[3]} ----取得元素3的长度
unset array--------------清除array
array=------------------清空array,赋给array空值
遍历字符串方法一
for ((i=0;i<${#array[@]};i++))
do
   echo ${array[$i]}
done
遍历字符串方法二
str="a --m"
for i in $str
do
echo $i
done
用while遍历
len=${#arr[@]}
i=0
while [ $i -lt $len ]
do
echo ${arr[$i]}
let i++
done
四、其它:
Array[3] = "a b c"和Array[3] = a b c这两个是等价的;假设Array[3] = "a "bc"",想要查找",用awk是找不到的。单引號
是能够找到的,就是双引號找不到;我们能够用截取字符串的方法来推断是否双引號,截取的字符串的方法例如以下:
${varible##*string} 从左向右截取最后一个string后的字符串
${varible#*string}从左向右截取第一个string后的字符串
${varible%%string*}从右向左截取最后一个string后的字符串
${varible%string*}从右向左截取第一个string后的字符串
将上面的string换成“就可以,然后在推断字符串的长度,假设相等就是没有。假设不相等就是有双引號。不能够
用更改数组分隔符的方法。那样做无效。这个双引號是shell内建的符号。
通用的awk查找方法,比如:
find=`echo {${arr[$i]}|awk 'BEGIN{FS=""}{for(i=1;i<=NF;i++) if($i==";") print $i}'`;
也能够用math和index方法,比如:flag=`echo {$line}|awk '{print match($0,"channel")}'` 
数组默认的分隔符是空格,假设想改变默认的分隔符,用以下的方法
str="abd#ddd#ff";str2=($(echo $str|tr ''#''|tr -s ''));

參考自:http://www.cppblog.com/zhangyq/archive/2010/10/08/126537.aspx?opt=admin

转载于:https://www.cnblogs.com/ldxsuanfa/p/10089086.html

你可能感兴趣的文章
HTML网页标记&nbsp;标签大全
查看>>
iOS Crash文件的解析(一)
查看>>
Win10中的IIS10安装php manager和IIS URL Rewrite
查看>>
JavaScript之面向对象与原型笔记整理--------创建对象之原型(2)
查看>>
Objective-C的hook方案(一): Method Swizzling
查看>>
JSP & EL & JSTL
查看>>
DHTML中window的使用
查看>>
Matplotlib安装感想
查看>>
poj 2479 (DP)
查看>>
asp 文件上传 代码
查看>>
arm-linux-androideabi-addr2line
查看>>
将 SharePoint 2010 网站集升级到 2013 (含沙盒方案)
查看>>
windows 下安装Python
查看>>
674. Longest Continuous Increasing Subsequence最长连续递增子数组
查看>>
670. Maximum Swap 允许交换一个数 求最大值
查看>>
三游植物园
查看>>
程序员斗图专用表情包
查看>>
poj 1273 最大流
查看>>
2018年12月19日
查看>>
Java同步—线程池的创建和使用
查看>>