Shell数组定义和遍历

数组定义:

 
1
arr = ( 1 2 3 4 5 ) # 注意是用空格分开,不是逗号!!

数组定义法2:

 
1
2
3
4
array
array [ 0 ] = "a"
array [ 1 ] = "b"
array [ 2 ] = "c"

获取数组的length(数组中有几个元素):

 
1
$ { #array[@]}

遍历(For循环法):

 
1
2
3
4
for var in $ { arr [ @ ] } ;
do
    echo $ var
done

遍历(带数组下标):

 
1
2
3
for i in "${!arr[@]}" ; do
    printf "%s\t%s\n" "$i" "${arr[$i]}"
done

遍历(While循环法):

 
1
2
3
4
5
6
i = 0
while [ $ i - lt $ { #array[@] } ]
do
     echo $ { array [ $ i ] }
    let i ++
done

向函数传递数组:

由于Shell对数组的支持并不好,所以这是一个比较麻烦的问题。

翻看了很多StackOverFlow的帖子,除了全局变量外,无完美解法。

这里提供一个变通的思路,我们可以在调用函数前,将数组转化为字符串。
在函数中,读取字符串,并且分为数组,达到目的。

 
 
1
2
3
4
5
6
7
8
9
10
11
12
fun ( ) {
         local _arr = ( `echo $ 1 | cut -d " "    -- output - delimiter = " " -f 1 - ` )
         local _n_arr = $ { #_arr[@]}
         for ( ( i = 0 ; i < $ _n_arr ; i ++ ) ) ;
         do   
                 elem = $ { _arr [ $ i ] }
                echo "$i : $elem"
         done ;
}
 
array = (a b c )
fun "$(echo ${array[@]})"
发布了362 篇原创文章 · 获赞 144 · 访问量 110万+

猜你喜欢

转载自blog.csdn.net/FENGQIYUNRAN/article/details/80727245