📜  Shell 脚本中的数组基础 |设置 1

📅  最后修改于: 2022-05-13 01:57:31.392000             🧑  作者: Mango

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/