Shell 脚本中的数组基础 |设置 1
如果我们想存储 1000 个数字并对它们执行操作,请考虑一种情况。如果我们使用简单的变量概念,那么我们必须创建 1000 个变量并对它们执行操作。但是很难处理大量的变量。所以最好在数组中存储相同类型的值,然后通过索引号访问。
Shell 脚本中的数组
数组是同一类型数据的系统排列。但是在 Shell 脚本中 Array 是一个包含多个值的变量,可能是相同类型或不同类型,因为默认情况下,在 shell 脚本中,所有内容都被视为字符串。数组是从零开始的,即索引从 0 开始。
如何在 Shell 脚本中声明数组?
我们可以用不同的方式在 shell 脚本中声明一个数组。
1. 间接申报
在间接声明中,我们在数组变量的特定索引中分配了一个值。无需先声明。
ARRAYNAME[INDEXNR]=value
2. 明确声明
在显式声明中,首先我们声明数组然后分配值。
declare -a ARRAYNAME
3. 复合赋值
在组件分配中,我们用一堆值声明数组。我们也可以稍后添加其他值。
ARRAYNAME=(value1 value2 .... valueN)
或者
[indexnumber=]字符串
ARRAYNAME=([1]=10 [2]=20 [3]=30)
在 Shell 脚本中打印数组值?
打印所有元素[@]
& [*]
表示 Array 的所有元素。
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
计算数组中的长度
计算 Array 中特定元素的长度。
使用 #(hash) 打印特定元素的长度
# 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/