2012-12-22 49 views
0

我想傳遞一個數組作爲參數到一個函數並添加一個新的元素到數組中。 然後將數組傳遞給另一個函數並打印其內容。 (這一切都在擊。)Bash:傳遞數組作爲參數然後添加新元素

syntax error near unexpected token `"$2"' 
`  $1+=("$2")' 

這是我得到的,可能是因爲給一個變量$分配一個值時,不能使用。我不知道如何解決這個問題。你可以幫我嗎?

這裏是我的方法:

#/bin/bash 

add_element() 
{ 
    $1+=("$2") 
} 

print_array() 
{ 
    for i in "${$1[@]}" 
    do 
     echo "$i" 
    done 
} 

declare -a ARRAY 

add_element ARRAY "a" 
add_element ARRAY "b" 
add_element ARRAY "1,2" 
add_element ARRAY "d" 

print_array ARRAY 
+2

那麼,如果我可能問0123問號 – Satya

+0

@Satya實際添加的問題。 – szantaii

+0

如果將add_element中的行更改爲如下所示:eval $ a + ='('$ *')';那麼你應該是金。 – Orwellophile

回答

1

這裏有一個可能性,使用間接擴張

#/bin/bash 

add_element() 
{ 
    local a="$1[@]" 
    a=("${!a}") 
    printf -v "$1[${#a[@]}]" "%s" "$2" 
} 

print_array() 
{ 
    local a="$1[@]" 
    printf '%s\n' "${!a}" 
} 

declare -a array 

add_element array "a" 
add_element array "b" 
add_element array "1,2" 
add_element array "d" 

print_array array 

評論:

  • 這真的很醜陋。我不知道你爲什麼要這樣做。請認識到bash不是爲了做這樣的事情而設計的。也許你想使用PHP或Perl或Java或其他東西。
  • 請勿在bash中使用大寫變量名稱。這被認爲是非常糟糕的bash練習。它很醜。這很糟糕,特別是當它可能與其他變量發生衝突時,如果有人使用mapfile內建函數(默認情況下存儲在名爲ARRAY的數組中),那麼情況可能如此。
  • 請考慮使用不同的東西來實現你想要的東西。真的,你不需要bash中的這些函數。
+0

感謝您的回答。不過,我試圖測試/推動Bash的限制。並感謝關於變量名稱的建議。 – szantaii