2013-04-30 68 views
0

我正在努力圍繞Bash數組進行打包,特別是我有這個函數需要加載數組;我寫的是這樣的:Bash函數,數組howto?

function list_files() { for f in *; do [[ -e $f ]] || continue done }

function list_array() { 

    array=list_files 
    number=0 

    for items in "${array[@]}" 
    do 
      let "number +=1" 
      echo -e "\033[1m$number\033[0m) $items" 
      tput sgr0 
      let "number -=$(echo "${#array[*]}")" 
    done 
} 

這裏的問題是該函數只能工作一次,但我需要在腳本中運行幾次。我不確定如何去做這件事。每次調用函數時,我都必須清空並重新加載數組,或者我必須在函數參數(list_array myarrayname而不是list_array)中提供不同的數組名稱。但是,我不知道如何完成這些任務,或者如果它們可能/可行。

任何幫助將非常歡迎!

+3

「功能只能工作一次」?!它根本不起作用。代碼中有語法錯誤。 – choroba 2013-04-30 07:23:02

+2

[永遠不解析ls的輸出](http://mywiki.wooledge.org/ParsingLs)使用file-globbing代替 – 2013-04-30 07:35:31

+3

你認爲'如果$ array'呢? – choroba 2013-04-30 07:37:40

回答

0

有點不清楚你想達到什麼目的;也許你可以從下面找到一些靈感:

#!/bin/bash 

list_files() { 
    number=0 
    for f in * 
    do 
     if [[ -f $f ]] 
     then 
      number=$((number+=1)) 
      echo $f, $number 
     fi 
    done 
} 

list_files_array() { 
    array=($1/*) 
    number=0 
    for item in ${array[@]} 
    do 
     if [[ -f $item ]] 
     then 
      number=$((number+=1)) 
      echo $item, $number 
     fi 
    done 
} 

list_files $(pwd) 
list_files_array $(pwd)