第四章 数组关联数组和别名使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第四章 数组关联数组和别名使用相关的知识,希望对你有一定的参考价值。

第四章 数组、关联数组和别名使用

数组

名词解释

数组作为一种特殊的数据结构在任何一种编程语言中都有它的一席之地,数组在shell脚本中也是非常重要的组成部分,它借助索引将多个独立的数据存储为一个角色。

语法

普通数组只能使用整数作为数组的索引值。

定义数组

格式:
arrary[key]=value
array=(value value value ...)

数组方法

单行一列值:

array_n=(1 2 3 4)

打印数组第一个值:
echo ${array_n[0]}  # 0 代表数组里边的索引,从左往右从0开始;
echo ${array_n}     # 默认不加索引,只打印第一个值。

打印数组所有值:
echo ${array_n[*]}

一组索引值:

[[email protected] ~]# array_num[0]="text1"
[[email protected] ~]# array_num[1]="text2"
[[email protected] ~]# array_num[2]="text3"
[[email protected] ~]# array_num[3]="text4"

[[email protected] ~]# echo ${array_num[0]}    # 打印数组中第一个值
text1

[[email protected] ~]# index=2
[[email protected] ~]# echo ${array_num[$index]}   #也可以通过变量调用索引
text3

[[email protected] ~]# echo ${array_num[*]}     # 打印数组中的所有值
text1 text2 text3 text4

打印数组长度(即数组中 元素的个数)

[[email protected] ~]# echo ${#array_n[*]}     # 也就是打印所有元素的基础上加#
4   

删除数组

删除数组中一个值
[[email protected] ~]# echo ${array_num[*]}
text1 text2 text3 text4
[[email protected] ~]# unset array_num[1]      #删除数组中一个值
[[email protected] ~]# echo ${array_num[*]}
text1 text3 text4
[[email protected] ~]# echo ${array_num[0]}
text1
[[email protected] ~]# echo ${array_num[1]}    #元素删除了,索引也跟着删除了。

[[email protected] ~]# echo ${array_num[2]}
text3

删除整个数组
[[email protected] ~]# unset array_num

数组的切片

就是截取一段数据

array=( [0]=one [1]=two [2]=three [3]=four )

# 截取所有元素
[[email protected] ~]# echo ${array[@]:0}  #等同于echo ${array[*]} ;@也代表所有
one two three four

#截取除了第一个元素 之后的所有数据
[[email protected] ~]# echo ${array[*]:1} 
two three four

#截取前两个元素
[[email protected] ~]# echo ${array[*]:0:2}  
one two

#截取第2个和第3个元素
[[email protected] ~]# echo ${array[*]:1:2}  
two three

子串删除

(实际就是对数组的元素匹配,匹配到的删除,并打印剩余的元素到终端;但并没有真正修改数组)

[[email protected] ~]# echo ${array[@]:0}   #查看数组所有元素
one two three four

#从左开始最短的匹配:"t*e" ,这代表会匹配到“thre”,程序就结束
[[email protected] ~]# echo ${array[@]#t*e}
one two e four

#从左开始最长的匹配:"t*e" ,这代表会匹配到“three”,程序就结束
[[email protected] ~]# echo ${array[@]##t*e}
one two four

#从字符串的结尾开始最短的匹配
[[email protected] ~]# array[1]=ttwo   #先修改two 为ttwo
[[email protected] ~]# echo ${array[@]}    #打印数组所有的元素
one ttwo three four
[[email protected] ~]# echo ${array[@]%t*o}    #从右开始向左最短匹配
one t three four
[[email protected] ~]# echo ${array[@]%%t*o}   #从右开始向左最长匹配
one three four

子串替换

#修改字符串o变成m
[[email protected] ~]# echo ${array[@]/o/m}    
mne ttwm three fmur

#不指定替换子串,则删除匹配到的字符
[[email protected] ~]# echo ${array[@]/o/}
ne ttw three fur
[[email protected] ~]# echo ${array[@]//o/}
ne ttw three fur

#替换字符串前面的子串
[[email protected] ~]# echo ${array[@]/#o/A}  
Ane ttwo three four

#替换字符串后面的子串
[[email protected] ~]# echo ${array[@]/%o/A}
one ttwA three four

#当然也可以指定数组元素 进行替换
[[email protected] ~]# echo ${array[3]/o/A} 
fAur

关联数组

关联数组从bash4.0开始被引入,关联数组的索引值可以使用任意的文本(其实就是把索引替换成了任意的字符串)。关联数组在很多操作中很有用。

array_var=([one]=one-1 [two]=two-2 [three]=three-3)
#这里把索引 0 1 2 分别替换成了one two three

#当然也可以写成如下
array_var[one]=one-1    

关联数组的打印方法跟普通数组用法一样

[[email protected] ~]# echo ${array_var[one]}
one-1

列出数组索引值

[[email protected] ~]# echo ${!array_var[*]}
one two three

注意:该方法也可以用于普通数组。

别名

别名就是提供一种便捷的方式来完成某些长串命令的操作。省去不必要的麻烦,提高效率。一般可以是函数或者alias命令来实现。

alias举例

alias nginxrestart=‘/usr/local/nginx/sbin/nginx -s reload‘

这样就nginxrestart就代替了nginx重启的命令,重启之后才能生效。
注意:马上要使用,需要把这条命令放入~/.bashrc文件中,退出系统 重新登录一下就可以使用了。
echo ‘alias nginxrestart="/usr/local/nginx/sbin/nginx -s reload"‘ >> ~/.bashrc

查看系统已经定义的别名

[[email protected] ~]# alias
alias cp=‘cp -i‘
alias egrep=‘egrep --color=auto‘
alias fgrep=‘fgrep --color=auto‘
alias grep=‘grep --color=auto‘
alias l.=‘ls -d .* --color=auto‘
alias ll=‘ls -l --color=auto‘
alias ls=‘ls --color=auto‘
alias mv=‘mv -i‘
alias rm=‘rm -i‘
alias which=‘alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde‘

别名转义

有些命令不是总是希望使用别名,可以在命令之前输入反斜杠\来忽略所定义过的别名。

格式:[[email protected] ~]# \command
[[email protected] ~]# alias       #查看已经定义的别名
alias pwd=‘pwd | cat -n‘

[[email protected] ~]# pwd         #查看别名后的命令的结果
     1  /root
[[email protected] ~]# \pwd        #忽略别名后 pwd的结果,忽略了打印行号的功能。
/root

以上是关于第四章 数组关联数组和别名使用的主要内容,如果未能解决你的问题,请参考以下文章

错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”

shell 边边角角

VSCode自定义代码片段—— 数组的响应式方法

VSCode自定义代码片段10—— 数组的响应式方法

数组和适配器不能调用虚空片段

如何关联多个 BigQuery 数组字段?