考虑一个情况,如果我们想存储1000个数字并对它们执行操作。如果我们使用简单的变量概念,那么我们必须创建1000个变量,并对它们执行操作。但很难处理大量变量。因此,最好在数组中存储相同类型的值,然后通过索引号进行访问。
Shell脚本中的数组 数组是同一类型数据的系统化排列。但是在Shell脚本中,数组是一个包含多个值的变量,这些值可能是同一类型的,也可能是不同类型的,因为在Shell脚本中,默认情况下,所有内容都被视为字符串。数组是从0开始的。
如何在Shell脚本中声明数组? 我们可以用不同的方式在shell脚本中声明数组。
1.间接申报 在间接声明中,我们在数组变量的特定索引中指定了一个值。不需要先申报。
ARRAYNAME[INDEXNR]=value
2.明确声明 在显式声明中,首先声明数组,然后赋值。
declare -a ARRAYNAME
3.复合赋值 在Compount赋值中,我们用一组值声明数组。我们以后也可以添加其他值。
ARRAYNAME=(value1 value2 .... valueN)
或 [indexnumber=]字符串
ARRAYNAME=([1]=10 [2]=20 [3]=30)
要在Shell脚本中打印数组值?
打印所有元素 [@]
& [*]
表示数组的所有元素。
echo ${ARRAYNAME[*]}
#! /bin/bash # To declare static Array arr=(prakhar ankit 1 rishabh manish abhinav) # To print all elements of array echo ${arr[@]} echo ${arr[*]} echo ${arr[@]:0} echo ${arr[*]:0} |
输出:
prakhar ankit 1 rishabh manish abhinav prakhar ankit 1 rishabh manish abhinav prakhar ankit 1 rishabh manish abhinav prakhar ankit 1 rishabh manish abhinav
打印第一个元素
# To print first element echo ${arr[0]} echo ${arr} |
输出:
prakhar prakhar
打印所选索引元素的步骤
echo ${ARRAYNAME[INDEXNR]}
# To print particular element echo ${arr[3]} echo ${arr[1]} |
输出:
rishabh ankit
打印特定索引中的元素
echo ${ARRAYNAME[WHICH_ELEMENT]:STARTING_INDEX}
# To print elements from a particular index echo ${arr[@]:0} echo ${arr[@]:1} echo ${arr[@]:2} echo ${arr[0]:1} |
输出:
prakhar ankit 1 rishabh manish abhinav ankit 1 rishabh manish abhinav 1 rishabh manish abhinav prakhar
打印范围内的元素
echo ${ARRAYNAME[WHICH_ELEMENT]:STARTING_INDEX:COUNT_ELEMENT}
# To print elements in range echo ${arr[@]:1:4} echo ${arr[@]:2:3} echo ${arr[0]:1:3} |
输出:
ankit 1 rishabh manish 1 rishabh manish rak
计算数组中的
计算数组中特定元素的长度。 使用#(散列)打印特定元素的长度
# Length of Particular element echo ${ #arr[0]} echo ${ #arr} |
输出:
7 7
计算数组的长度。
# Size of an Array echo ${ #arr[@]} echo ${ #arr[*]} |
输出:
6 6
在数组中搜索
arr[@]
:所有数组元素。 /Search_using_Regular_Expression/
:在数组中搜索 如果搜索找到模式,则返回1,否则返回零。它不会改变原始数组元素。
# Search in Array echo ${arr[@]/*[aA]*/} |
输出:
1
在数组中搜索和替换
//Search_using_Regular_Expression/Replace
:搜索和替换
搜索和替换不会更改数组元素的原始值。它只是返回了新的值。所以你可以把这个值存储在相同或不同的变量中。
# Replacing Substring Temporary echo ${arr[@] //a/A } echo ${arr[@]} echo ${arr[0] //r/R } |
输出:
prAkhAr Ankit 1 rishAbh mAnish AbhinAv prakhar ankit 1 rishabh manish abhinav RakhaR
要删除Shell脚本中的数组变量?
要删除index-1元素
unset ARRAYNAME[1]
要删除整个数组
unset ARRAYNAME
#! /bin/bash # To declare static Array arr=(prakhar ankit 1 rishabh manish abhinav) # To print all elements of array echo ${arr[@]} # prakhar ankit 1 rishabh manish abhinav echo ${arr[*]} # prakhar ankit 1 rishabh manish abhinav echo ${arr[@]:0} # prakhar ankit 1 rishabh manish abhinav echo ${arr[*]:0} # prakhar ankit 1 rishabh manish abhinav # To print first element echo ${arr[0]} # prakhar echo ${arr} # prakhar # To print particular element echo ${arr[3]} # rishabh echo ${arr[1]} # ankit # To print elements from a particular index echo ${arr[@]:0} # prakhar ankit 1 rishabh manish abhinav echo ${arr[@]:1} # ankit 1 rishabh manish abhinav echo ${arr[@]:2} # 1 rishabh manish abhinav echo ${arr[0]:1} # rakhar # To print elements in range echo ${arr[@]:1:4} # ankit 1 rishabh manish echo ${arr[@]:2:3} # 1 rishabh manish echo ${arr[0]:1:3} # rak # Length of Particular element echo ${ #arr[0]} # 7 echo ${ #arr} # 7 # Size of an Array echo ${ #arr[@]} # 6 echo ${ #arr[*]} # 6 # Search in Array echo ${arr[@]/*[aA]*/} # 1 # Replacing Substring Temporary echo ${arr[@] //a/A } # prAkhAr Ankit 1 rishAbh mAnish AbhinAv echo ${arr[@]} # prakhar ankit 1 rishabh manish abhinav echo ${arr[0] //r/R } # pRakhaR |
输出:
prakhar ankit 1 rishabh manish abhinav prakhar ankit 1 rishabh manish abhinav prakhar ankit 1 rishabh manish abhinav prakhar ankit 1 rishabh manish abhinav prakhar prakhar rishabh ankit prakhar ankit 1 rishabh manish abhinav ankit 1 rishabh manish abhinav 1 rishabh manish abhinav rakhar ankit 1 rishabh manish 1 rishabh manish rak 7 7 6 6 1 prAkhAr Ankit 1 rishAbh mAnish AbhinAv prakhar ankit 1 rishabh manish abhinav pRakhaR
参考: https://www.tecmint.com/working-with-arrays-in-linux-shell-scripting/