2013-04-30 22 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)