我想将数组参数传递给bash中的函数,并将一些测试代码写为:
#!/bin/sh
function foo {
a=$1;
for i in ${a[@]} ; do
echo $i
done
}
names=(jim jerry jeff)
foo ${names[@]}
上面的代码只显示jim,而不是三个j *。所以我的问题是:
答案 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
}