美文网首页
Shell数组和字典总结

Shell数组和字典总结

作者: 阿当运维 | 来源:发表于2022-07-20 09:15 被阅读0次

一. 数组

1.1 创建数组

  • 创建空数组

names=()

  • 数组添加元素

names=()

declare -p names

declare -a names=()

names+="beijing"

declare -p names

declare -a names=([0]="beijing")

names+=("beijing" "shanghai" "guangzhou")

declare -p names

declare -a names=([0]="beijing" [1]="beijing" [2]="shanghai" [3]="guangzhou")

  • 空格分开的字符串用括号包围

names=("Bob" "Peter" "$USER" "Big Bad John")

  • 指定索引号,索引号不连续的也叫稀疏数组

names=([0]="Bob" [1]="Peter" [20]="$USER" [21]="Big Bad John")

  • 指定索引号,且单独定义

names[0]="Bob"

  • 指定路径加通配符

photos=(~/"My Photos"/*.jpg)

files=(*)

  • 显示定义并初始化

declare -a myfiles='([0]="/home/a/.bashrc" [1]="billing codes.xlsx" [2]="hello.c")'

  • for循环初始化

  • 多个数组合并为一个数组


names=(beijing shanghai)

ages=(19 20 99)

etcs=(${names[@]} ${ages[@]})

declare -p etcs

declare -a etcs=([0]="beijing" [1]="shanghai" [2]="19" [3]="20" [4]="99")

  • 数组元素模式匹配(搜索替换元素值)

# 精确匹配

names=(beijing shanghai)

new_names=(${names[@]/hai/guangzhou})

declare -p new_names

declare -a new_names=([0]="beijing" [1]="shangguangzhou")

# 模糊匹配

names=(beijing shanghai)

new_names=(${names[@]/*hai/guangzhou})

declare -p new_names

declare -a new_names=([0]="beijing" [1]="guangzhou")

1.2 访问数组

  • 访问数组通常直接用数组下标访问

char=(a b c q w x y z)

echo "${char[2]}"

c

  • 数组的分片访问指定位置

# 表示从下标为3的位置开始访问2个元素

arr=(able good fly python java test go now)

echo "${arr[@]:3:2}"

python java

  • 获取指定下标的元素值的字符个数

arr=(able good fly python java test go now)

echo "${#arr[3]}"

6

1.3 遍历数组

  • 打印出变量的类型、值

declare -p myfiles

  • 使用printf循环打印:${myfiles[@]}可以理解为$@所有的位置参数

printf '%s\n' "${myfiles[@]}"

  • 显示for循环打印:

for file in "${myfiles[@]}"

do

cp "$file" /backups/

done

  • 使用"${myfiles[@]}"代替for循环

myfiles=(db.sql home.tbz2 etc.tbz2)

cp "${myfiles[@]}" /backups/

  • 一次性输出可读性高的字符串连接

names=("Bob" "Peter" "$USER" "Big Bad John")

echo "Today's contestants are: ${names[*]}"

Today's contestants are: Bob Peter lhunath Big Bad John

  • 获取元素个数

$ array=(a b c)

$ echo ${#array[@]}

3

declare -a myfiles='([0]=".bashrc" [1]="billing codes.xlsx" [4]="hello.c")'

echo ${#myfiles[@]}

3

  • 遍历数组的index

$ first=(Jessica Sue Peter)

$ last=(Jones Storm Parker)

for i in "${!first[@]}"; do

echo "${first[i]} ${last[i]}"

done

结果

Jessica Jones

Sue Storm

Peter Parker

  • 类似c语言的遍历数组下标,但是步长为2

char=(a b c q w x y z)

for ((i=0; i

echo "${char[i]} and ${char[i+1]}"

done

结果

a and b

c and q

w and x

y and z

1.4 删除元素


char=(a b c q w x y z)

declare -p char

declare -a char=([0]="a" [1]="b" [2]="c" [3]="q" [4]="w" [5]="x" [6]="y" [7]="z")

unset char[2]

declare -p char

declare -a char=([0]="a" [1]="b" [3]="q" [4]="w" [5]="x" [6]="y" [7]="z")

二. 字典

bash里面的字典叫做关联数组,字典其实和数组类似,不同点在于,字典的key是字符串,并且遍历时是随机的。

注意事项:

  • 字典的key遍历是随机的顺序, 它不适合存放顺序的元素

  • 除了遍历是随机的外, 字典的用法基本和数组是一致的

2.1 创建字典

  • 显示声明并初始化方法1

declare -A fullNames

fullNames=( ["lhunath"]="Maarten Billemont" ["greycat"]="Greg Wooledge" )

echo "I'am ${fullNames[greycat]}."

  • 显示声明并初始化方法2

$ declare -A dict

$ dict[astro]="Foo Bar"

$ declare -p dict

declare -A dict='([astro]="Foo Bar")'

2.2 遍历字典

  • 像遍历数组一样,只不过index是字符串了

for user in "${!fullNames[@]}"; do

echo "User: $user, full name: ${fullNames[$user]}."

done

User: lhunath, full name: Maarten Billemont.

User: greycat, full name: Greg Wooledge.

三. 总结

  • for value in "${myfiles[@]}" 表示遍历数组的元素值

  • for index in "${!myfiles[@]}" 表示遍历数组的下标号

  • echo "${#myfiles[@]}" 表示获取数组的元素个数

  • echo "${names[*]}" 表示一次性的打印成字符串便于阅读

  • declare -a variable 表示定义一个数组

  • declare -A variable 表示定义一个字典

  • declare -p variable 表示打印遍历variable的类型、值

相关文章

  • Shell数组和字典总结

    一. 数组 1.1 创建数组 创建空数组 names=() 数组添加元素 空格分开的字符串用括号包围 names=...

  • shell 数组、字典

    1.字典、数组示例 原文链接

  • swift--第一天总结

    字符串 数组总结 字典 元组总结 可选类型 函数

  • Linux Shell:Shell数组操作

    摘要:Linux,Shell Shell数组类型 Shell数组分为普通数组和关联数组,普通数组就是相同类型的元素...

  • 数组和字典的关系 -好基友

    JSON数据格式: 数组和字典的关系 -好基友,套来套去 字典套 数组套 字典 { "succes...

  • Shell:数组操作

    原文链接 数组定义 元素赋值 获取元素 获取数组长度 数组遍历 方式1 方式2 总结 Shell数组是用括号来表示...

  • 数组和字典

    为什么用集合有时候系统中有很多的对象,我们想要有条理的将其进行管理首先想到的就是使用数组来管理一批数据但是数组有局...

  • 100-SQLite基础

    iOS中的数据存储方式 Plist(NSArray\NSDictionary),只能存储数组,字典,但是数组和字典...

  • 每天学习一个shell 技能 (2)

    每天学习一个shell 技能 (2) Shell 数组 定义数组 读取数组 获取数组的长度 Shell 注释 以"...

  • Swift之字典

    这篇来说说字典的定义用法。定义字典: 也可以这么定义个空字典: 定义一个有值的字典: 定义一个字典数组: 总结 字...

网友评论

      本文标题:Shell数组和字典总结

      本文链接:https://www.haomeiwen.com/subject/qgjeirtx.html