运维开发网

Linux/UNIX不同shell环境下数组的处理

运维开发网 https://www.qedev.com 2020-02-22 22:41 出处:51CTO 作者:xiaoyuwang
有遗漏和不当的地方请大家指正,谢谢![关于声明]比较通用的做法,如ksh和bashdeclare -a 数组名 注意在ksh下还支持另外一种独特的变量声明赋值语法比较特殊。set -A varname var1 var2 var3 varn 末了要说明一下,一般任意的shell下变量可以拿来就用,不必声明。 [关于赋值]下面的两种这种方法适用于bash和ksh
有遗漏和不当的地方请大家指正,谢谢!

[关于声明]

比较通用的做法,如ksh和bash

declare -a 数组名

注意在ksh下还支持另外一种独特的变量声明赋值语法比较特殊。

set -A varname var1 var2 var3 varn

末了要说明一下,一般任意的shell下变量可以拿来就用,不必声明。
[关于赋值]

下面的两种这种方法适用于bash和ksh。

定义一

varname=(var1 var2 var3 varn)

定义二

varname[0]=var1

varname[1]=var2

varname[2]=var3

varname[n-1]=varn

定义三

在csh我们需要这样定义:

set varname=(var1 var2 var3 varn)

set varname[1]=var1

set varname[2]=var2

set varname[3]=var3

set varname[n]=varn

特别注意在csh和其它shell中不同的是数组的下标是从1开始的。
[关于引用]

全部引用

方法一

适用于bash、ksh、csh等大部分shell。

${varname[*]}

方法二

只适用于bash、ksh,对于csh不适用。

${varname[@]}方法三只适用于csh,不支持ksh和bash。

$varname

单独引用

语法适用于bash、ksh、csh等大部分shell,但是在csh/tcsh下的意义和其它shell有差异。

${varname[n]}

例如:echo ${barname[3]}

请严格区分csh与bashcsh的区别。因为在csh中没有下标为0的数组元素,下标的序数是从1开始的。

数组包含数值的数目方法一:

只适用于bash和ksh,不支持csh。

${#varname[*]}

方法二:

只支持csh,不支持bash和ksh。 $#varname

数组中某一个值的字符长度

只适用于bash和ksh,不支持csh。

${#varname[1]}

在bash、ksh下 $varname与${varname[0]}的含意是一样的; $varname[1]与${varname[1]}含意是不一样的,$varname[1]等价于${varname[0]}"[1]"。在csh下 $varname与${varname[*]}的含意是一样的。
[元素的添加、删除]

删除数组中元素:

该方法适用于bash、ksh,不支持csh。

unset varname[5]

关于数组中元素的值的清除,即置空:

bash和ksh下这样操作,不支持csh

varname[5]= #清除数组varname中的第六个元素

关于数组的清除:

适用于bash、ksh、csh等大部分shell。

unset varname 向数组中添加元素:

方法一、二只适用于bash、ksh,不适用于csh; 方法一:

varname=(${varname[*]} varn-1 varn varn+1)

方法二:

varname[${#varname[*]}]=varn

方法三:

是csh特有的。

set varname=($varname varn+1 varn+2) #或者$varname用${varname[*]}替换。 [关于数组的批量处理]

这部分内容,说白了就是综合运用各种shell的内建循环命令。只要对前面的内容熟悉了,并对各种shell的循环命令有一定的了解,难度就不是很大。

由于涉及bashkshcsh下的实现及不同的语法形式,涉及数组的赋值、添加和删除元素、读取多个方面。所以计划单独一篇文章来说明。

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号