如何在bash中使用数组作为函数变量

时间:2012-03-16 07:41:39

标签: bash

我想将数组参数传递给bash中的函数,并将一些测试代码写为:

 #!/bin/sh

    function foo {
       a=$1;
       for i in ${a[@]} ; do
          echo $i
       done
    }
    names=(jim jerry jeff)
    foo ${names[@]}

上面的代码只显示jim,而不是三个j *。所以我的问题是:

  • 为什么我的代码不起作用
  • 什么是正确的方法

3 个答案:

答案 0 :(得分:2)

#!/bin/bash
function foo {
a=($*)
for i in ${a[@]}
do
    echo $i
done
}

names=(jim jerry jeff)
foo ${names[@]}

你的代码并没有向我显示吉姆,而是"名字",字面意思。你必须传递整个数组。你必须用a=$($)重新获得它。

关于Arrays的bash中的manpage部分相当长。我只引用一句话:

  

引用不带下标的数组变量等效于引用下标为0的数组。

答案 1 :(得分:2)

你相当亲密;最大的问题是命令a=$1,它只将第一个参数($1)分配给a,而您想要分配整个参数列表($@),并将其指定为数组而不是字符串。我纠正的其他事情:你应该在使用变量时使用双引号,以避免与特殊字符混淆(例如空格);并使用#!/bin/bash启动脚本,因为数组是bash扩展,并不总是在品牌X shell中可用。

#!/bin/bash

function foo {
    a=("$@")
    for i in "${a[@]}" ; do
        echo "$i"
    done
}

names=(jim jerry jeff "jim bob")
foo "${names[@]}"

答案 2 :(得分:1)

例如:

my_array[0]="jim"
my_array[1]="jerry"

function foo
{
    #get the size of the array
    n=${#my_array[*]}
    for (( Idx = 0; Idx < $n; ++Idx  )); do
            echo "${my_array[$Idx]}"
    done
}
相关问题