shell 如何取得陣列長度?

如果您覺得您的問題不屬於 debian desktop 或是 debian server 版的範圍內,請在這裡發問。

版主: mufa

shell 如何取得陣列長度?

文章lthwie » 週二 8月 08, 2006 8:33 pm

大家好,我從網路上查到要取得陣列長度(陣列中的個數),可以使用 $#var ,不過我測試結果都沒效果,還有其他方法取的陣列長度?

例如:
fs=`ls *.tgz`
我想知道目錄下共有幾個 .tgz 檔案,但是使用
fcount=$#fs
卻無法取的檔案個數,不知如何解決?
lthwie
可愛的小學生
可愛的小學生
 
文章: 40
註冊時間: 週日 10月 06, 2002 9:55 am

文章wzshen » 週二 8月 08, 2006 11:28 pm

ls *.tgz | wc -l

這樣不就可以了嗎!!
頭像
wzshen
可愛的小學生
可愛的小學生
 
文章: 18
註冊時間: 週六 6月 21, 2003 10:49 am

文章訪客 » 週三 8月 09, 2006 4:28 am

取得陣列長度可用以下的作法:

一、初級班.................................
陣列宣告:
myArray=(test1 test2 test3 test4) #宣告陣列
#取得陣列大小,但是第一個array index 是從0開始
echo ${#myArray[*]}

二、進階班...................................................
自目錄中取得特定的檔案並取得其數量(ex: tgz 類型的檔案):
num=0 #宣告一個 int var來加總取得檔案的數量
myArray=('ls your_dir_path') #取得特定目錄底下檔案的列表
for file in `echo ${myArray[*]}; do #'`' <= 為Esc鍵底下的鍵
#先取得檔案名稱的長度要用來取得結尾的檔名
file_length=`echo $file |wc -c`

#擷取檔案結尾的字串,雖然'tgz'字串總共3個字元,但是以'wc -c'擷取出來的長度卻會變成4個字元的長度,因此我的擷取的開始字串長度才會以字串長度加1。(我猜這個原因可能是因為,cut擷取字串長度時還有加上字串的結尾字元所以才會變成`字串原長度+1`)
short_name=`echo $file |cut --b $((file_length-4))-$file_length`

#以下為判斷是否為tgz結尾的檔案,若是的話則num var加1。
if [ "$short_name" = "tgz" ]; then
num=$((num+1))
else
continue
fi
done
echo "共有 $num 個tgz的檔。"

三、大師級手法.................................................
ls your_dir_path/*.tgz |wc -l



分享一下我個人的心得,獻醜了 :ooops: .....若有錯誤請賜教..thanks
訪客
 

文章lthwie » 週四 8月 10, 2006 2:02 am

>echo ${#myArray[*]}

原來是這樣用,還有 wc 這個指令。
謝謝前輩了!
lthwie
可愛的小學生
可愛的小學生
 
文章: 40
註冊時間: 週日 10月 06, 2002 9:55 am


回到 debian misc

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客

cron