2011-06-30 26 views
1

如何在shell腳本中將數組作爲函數傳遞?
我寫下面的代碼:將數組傳遞給shell腳本的函數

function test(){ 
param1 = $1 
param2 = $2 
for i in ${$param1[@]} 
do 
    for j in ${param2[@]} 
do 
     if($(i) = $(j)) 
      then 
      echo $(i) 
      echo $(j) 
     fi 
done 
done 
} 

,但我得到line 1: ${$(param1)[@]}: bad substitution

回答

11

有多種問題:

  • 分配變量
  • 當你不能有=周圍的空間如果語句的語法錯誤
  • 數組傳遞不是右
  • 儘量不要打電話給你的函數test,因爲這是一個shell命令

這裏是固定的版本:

myFunction(){ 
    param1=("${!1}") 
    param2=("${!2}") 
    for i in ${param1[@]} 
    do 
    for j in ${param2[@]} 
    do 
     if [ "${i}" == "${j}" ] 
     then 
      echo ${i} 
      echo ${j} 
     fi 
    done 
    done 
} 

a=(foo bar baz) 
b=(foo bar qux) 
myFunction a[@] b[@] 
+0

它正在工作,但它不循環。 param1只包含數組的第一個索引。 param1 [0] –

+0

我打電話爲 myFunction $ p1 $ p2 其中$ p1大小爲65 –

+0

@ vivek-goel我已更新我的答案並添加了示例函數調用。 – dogbane

0

您可以使用下面的腳本相應

#!/bin/bash 

param[0]=$1 
param[1]=$2 


function print_array { 
     array_name=$1 
     eval echo \${$array_name[*]} 
     return 
} 

print_array param 
exit 0