[Linux基礎]-- shell 遍歷數組的幾種方法

背景

某天遇到一個問題,現象如下:第一種遍歷正常打印元素,然而第二種遍歷只會打印一個元素!

#!/bin/bash
# $1 代表文件目錄
# 執行 eg:
#        sh your_shell.sh /user/lib/

echo "開始時間:`date '+%Y-%m-%d %H:%M:%S'`"
# 1、獲取所有的 file
files=`ls $1`

# 2、定義 1個數組變量
declare -a array_files01


# 數組 index 初始化爲 0
m1=0


# 遍歷
for ays in ${files}; do
{
   # 獲取數組長度
   num_1=${#array_files01[@]}

   # 添加元素到數組中, index 每次需要 +1
   array_files01[m1]=${ays};
   m1=`expr ${m1} + 1`;
    
   fi
}
done

echo "結束分配數組時間:`date '+%Y-%m-%d %H:%M:%S'`"
# 打印提示信息
echo "1數組長度:${#array_files01[@]}"

# 第一種遍歷:正常
for i in  ${array_files01[@]}; do
 echo $i
done 

# 第二種遍歷:不正常
for i in  ${array_files01}; do
 echo $i
done 

幾種遍歷數組的方法

1、for 循環

################### 第一種 #######################
for i in ${array[@]}
#也可以寫成for element in ${array[*]}
do
echo $i
done


################## 第二種 ########################
for i in ${array[*]}
do
echo $i ;
done


################## 第三種 ########################
for(( i=0;i<${#array[@]};i++)) do
#${#array[@]}獲取數組長度用於循環
echo ${array[i]};
done;

2、while 循環

i=0  
while [ $i -lt ${#array[@]} ]  
#當變量(下標)小於數組長度時進入循環體
do  
    echo ${ array[$i] }  
    #按下標打印數組元素
    let i++  
done  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章