function print_array(){
NUMBER=1
for i in ${$1[@]}; do
printf "%d: %s n" $NUMBER $i
$((NUMBER++))
done
}
我想写一个函数,它可以接受一个数组作为参数,并打印数组中的所有内容。
所以我写了一些类似${$1[@]}的东西,shell说这是一个";糟糕的替换";。
有什么方法可以达到同样的效果吗?谢谢
此代码有几个问题,但主要问题之一是$1
永远不会是数组。如果你想把一个数组传递给一个函数,你需要做这样的事情:
print_array(){
NUMBER=1
for i in "${@}"; do
printf "%d: %s n" $NUMBER "$i"
((NUMBER++))
done
}
myarray=(this is "a test" of arrays)
print_array "${myarray[@]}"
这将输出:
1: this
2: is
3: a test
4: of
5: arrays
注意,这个脚本中的引用是至关重要的:写${myarray[@]}
与写"${myarray[@]}"
不同;有关详细信息,请参阅bash手册的Arrays部分,有关$@
与"$@"
的信息,请参见Special Parameters部分。