2014-09-11 46 views
0

我參考Passing arrays as parameters in bash,但它失敗。這裏是我的測試腳本(bash的兩個3.0)在bash中傳遞數組作爲參數3

bash的版本

GNU bash, version 3.00.16(1)-release (sparc-sun-solaris2.10) 
Copyright (C) 2004 Free Software Foundation, Inc. 

腳本t.sh

fn() { 
local i 
local v1="$1" 
local v2="$2" 
local v3="$3" 
echo "v1=$1" 
echo "v2=$2" 
echo "v3=$3" 
declare -a a1=("${!1}") 
declare -a a2=("${!2}") 
echo "a1:" 
for i in ${!a1[*]} ; do 
    echo " ${a1[$i]}" 
done 

echo "a2:" 
for i in ${!a2[*]} ; do 
    echo " ${a2[$i]}" 
done 
} 
caller() { 
    local a=("a1 a2" "a3" "a4") 
    local b=("b1" "b2" "b3" "b4") 
    echo "method 1:" 
    fn "${a[@]}" "${b[@]}" $1 $2 $3 
    echo "method 2:" # workable on bash 4.2.45 
    fn a[@] b[@] $1 $2 $3 
} 
caller c 

輸出

method 1: 
v1=(a1 a2 a3 a4) 
v2=(b1 b2 b3 b4) 
v3=c 
a1: 
a2: 
method 2: 
v1=a[@] 
v2=b[@] 
v3=c 
t.sh: array assign: line 10: syntax error near unexpected token `(' 
t.sh: array assign: line 10: `(a1 a2 a3 a4)' 

預期輸出

... 
a1: 
    a1 a2 
    a3 
    a4 
a2: 
    b1 
    b2 
    b3 
    b4 
+0

我不明白你顯示輸出。我看到'v1 = a1 a2 v2 = a3 v3 = a4'。 – choroba 2014-09-11 08:29:05

+0

你確定你的bash是3.0版嗎 – 2014-09-11 08:34:51

+0

bash版本4.1.11(2) – choroba 2014-09-11 08:36:31

回答

0

我不知道你在哪裏遇到的問題,但我已經證實了Bash 3.2.25操作:

./caller.sh 
method 1: 
v1=a1 a2 
v2=a3 
v3=a4 
a1: 

a2: 

method 2: 
v1=a[@] 
v2=b[@] 
v3=c 
a1: 
    a1 a2 
    a3 
    a4 
a2: 
    b1 
    b2 
    b3 
    b4 
03:36 lakehouse~/scr/tmp> bash --version 
GNU bash, version 3.2.25(1)-release (i586-suse-linux-gnu) 
Copyright (C) 2005 Free Software Foundation, Inc. 
+0

我不得不使用SunOS sparc CPU和非常老bash然後你。也許這就是爲什麼你的結果與我不同。 – 2014-09-11 09:28:07