bash中的数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bash中的数组相关的知识,希望对你有一定的参考价值。
bash中有变量,它有一个很重要的特性:一个变量中仅能存储一个数值;但是,在实际应用中,一个数值往往是达不到我们的需求的,所以这里就引入了数组:能够容纳多个属组元素的连续的内存空间;它的引入使人们的工作效率提高了。数组分为稀疏数组和稠密数组,其中bash属于稀疏数组。数组中有数组元素:数组中任何一个存放数据的存储单元,其作用相当于一个变量。
数组元素标识分为以下几类:
索引数组标识:所有的数组元素都是使用数字编号的;
通常数字编号是从0开始的,即:0,1,2,3...
关联数组标识:所有的数组元素都可以使用名称(字符串)来标识;
注意:一般在bash4.0以上的版本才有可能支持关联数组;
数组的生命和定义:
1.declare命令:
-a to make NAMEs indexed arrays (if supported)
将其后的变量名称声明为索引数组;
-A to make NAMEs associative arrays (if supported)
将其后的变量名称声明为关联数组;
示例:
定义稠密数组:
[[email protected] ~]# declare -a NAMES=("zhao" "qian" "sun" "li") [[email protected] ~]# echo ${NAMES[3]} li
定义稀疏数组:
[[email protected] ~]# declare -a NAMES=([0]="zhao" [2]="qian" [8]="sun" [10]="li") [[email protected] ~]# echo ${NAMES[0]} zhao
2.直接使用变量赋值的方式:
定义稠密的索引数组:
ARRAY_NAME=("value1" "value2" "value3" ...)
定义稀疏的索引数组:
ARRAY_NAME=([0]="value1" [1]="value2" [3]"value3" ...)
定义关联数组:
ARRAY_NAME=([Index_Inanme]='value1' Index_Inanme='value2' ...)
3.分别定义数组元素:
ARRAY_NAME[0]='value1'
ARRAY_NAME[1]='value2'
ARRAY_NAME[2]='value3'
...
ARRAY_NAME[N-1]='value(n-1)'
[[email protected] ~]# STUDENT_INF[O]='xiaoma' [[email protected] ~]# STUDENT_INF[1]='22' [[email protected] ~]# STUDENT_INF[2]='123456789' [[email protected] ~]# echo ${STUDENT_INF[0]} xiaoma [[email protected] ~]# echo ${STUDENT_INF[1]} 22 [[email protected] ~]# echo ${STUDENT_INF[2]} 123456789
引用数组元素的方式:
${ARRAY_NAME[INDEX]}
注意:如果在引用数组元素时没有给出具体的索引编号,则默认编号为"0",即显示第一个数组元素的数值;
引用整个数组中所有元素:
${ARRAY_NAME[*]}或者${ARRAY_NAME[@]}
[[email protected] ~]# STUDENT_INF[O]='xiaoma' [[email protected] ~]# STUDENT_INF[1]='22' [[email protected] ~]# STUDENT_INF[2]='123456789' [[email protected] ~]# echo ${STUDENT_INF[*]} xiaoma 22 123456789 [[email protected] ~]# echo ${STUDENT_INF[@]} xiaoma 22 123456789
引用整个数组的所有元素的索引号:
${!ARRAY_NAME[*]}或者${!ARRAY_NAME[@]}
[[email protected] ~]# echo ${!STUDENT_INF[@]} 0 1 2 [[email protected] ~]# echo ${!STUDENT_INF[*]} 0 1 2
查看数组中的元素个数(数组长度):
${#ARRAY_NAME[*]}或者${#ARRAY_NAME[@]}
[[email protected] ~]# echo ${STUDENT_INF[@]} xiaoma 22 123456789 [[email protected] ~]# echo ${#STUDENT_INF[*]} 3 [[email protected] ~]# echo ${#STUDENT_INF[@]} 3
数组切片:
${ARRAY_NAME[*]:offset}或者${ARRAY_NAME[@]:offset}
//显示包括offset数值所对应表示的元素及其后所有的元素;
[[email protected] ~]# echo ${NAMES[@]} zhao qian sun li [[email protected] ~]# echo ${NAMES[@]:2} qian sun li
${ARRAY_NAME[*]:offset:number}或者${ARRAY_NAME[@]:offset:number}
//显示数组中包括offset数值所对应表示的位置的元素及其后number个元素的值;
[[email protected] ~]# echo ${NAMES[@]} zhao qian sun li [[email protected] ~]# echo ${NAMES[@]:2:2} qian sun
撤销数组:
unset ARRAY_NAME
RANDOM变量:位置:/dev/random
随机数变量:0-32767,整数值;
[[email protected] ~]# echo $RANDOM 383 [[email protected] ~]# echo $RANDOM 30783
随机数如何生成的:
从熵池中取随机数;
熵池:
/dev/random
两次敲击键盘的时间间隔;
两次IO的时间间隔;
...
/dev/uradom:伪熵池
利用应用程序计算得到的随机数;
以上是关于bash中的数组的主要内容,如果未能解决你的问题,请参考以下文章
-bash: /usr/bin/ls: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory(代码片段