shell中使用数组
shell的数组
在shell中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般方法有:
array=(value1 value2 ...... valueN) #从下标0开始依次赋值
array=([1]=value1 [2]=value2 [0]=value0) #指定下标赋值
declare -a array=(value1 value2 ...... valueN) #声明+赋值,也可以只声明
unixtype=('Debian' 'Red Hat' 'Fedora') #如果元素有空格,就要用引号
set| grep array #利用set查看数组赋值情况此外页可以通过 read 的交互方式来定义数组:
# read -a array #-a表示从标准输入读入数组,遇到换行为止
1 2 3 4 5
# echo "${array[@]}"
1 2 3 4 5可以通过如下方法清除数组:
unset array #清除数组
unset array[1] #清除数组的指定元素数组变量
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
#取得数组下标的值
${!array[@]}
#从数组的n位置开始取m个元素
${array[@]:n:m}示例如下:
数组的常用操作
命令执行结果放入数组
读入字符串,给数组赋值
字符串的字母逐个放入数组并输出
判断一个变量是否在数组中
构建二维数组
文件内容读入数组
数组使用的常用方法
目前我在脚本中使用数组非常简单:
此外,如果有一行数据从文件中读出,默认空格分隔,则可以直接复制为数组。以下脚本获取系统中所有D住进程的pid和执行进程名字
打印数组:
其他简单案例
案例
构建数组
直接读取一行文本来构建array
以上命令也可以使用
这里假设文本是 bill chen bai hu
获取数组的长度
输出结果4 (共4个单词)
获取数组某个单元的长度
输出结果2,即第4个单词是2个字符(注意,数组的下标从0开始)
输出数组的某个单元
输出内容 bill
在array每个元素添加字符串
参考 How to append a string to each element of a Bash array?
向函数传递数组
之前写了一个简单的脚本,传递一个文件名列表数组给函数,但是发现在函数中,只接收到数组的第一个元素值:
通过debug方式打印函数 download_package() 中变量 $package_list ,发现确实只拿到了数组的第一个元素值。
这个错误是因为传递给函数的数组实际上是空格分割的多个字符串,这样数组实际上就变成了传递给函数的多个变量$1 $2 $3 $4 $5 $6 $7,导致在函数内部如果以为数组是一个变量传递进来,只取 $1 是拿不到完整的数组的。
解决方法参考 Passing Array to Function in Bash shell 也就是传递数组时,在数组外围加上引号,这样就转变成1个字符串变量。再在函数内部把这个单一字符串转换回数组:
参考
Last updated
Was this helpful?