2012-06-05 73 views
2

我有一個腳本,我已經定義了兩個數組。現在取決於傳遞的數組名(作爲參數),我想在下面的函數中處理相同的內容。此前,我甚至沒有獲得變量'ARRAY'中的任何元素,直到我使用${!}無法檢索所有數組元素

現在的問題是,當我打印數組內容(或該數組中的元素數)時,第一個元素。

有什麼建議嗎?

腳本:

#!/bin/bash 

APP=$1 

process_data() { 
    ARRAY="${!1}" 
    echo "No of array elements: ${#ARRAY[@]}" 
    echo "Array content: ${ARRAY[@]}" 
} 


ORADATA=(
"oraserver/content:abcDaily/ORAServer/" 
"oraserver/w3s-ix86:abcDaily/ORAServer/" 
) 

SQLDATA=(
"sqlserver/content:abcDaily/SQLServer/" 
"sqlserver/w3s-ix86:abcDaily/SQLServer/" 
) 

process_data ${APP[@]} 

命令:

-bash-2.05b$ ./testarray.sh ORADATA 

輸出:

No of array elements: 1 
Array content: oraserver/content:abcDaily/ORAServer/ 

回答

1

這裏是沒有的eval一個版本(所以它在數組的值正確處理shell字符):

#!/bin/bash 

APP=$1 

process_data() { 
    ARRAYVAR="$1[@]" # This just textually appends "[@]" to $1 
    ARRAY=("${!ARRAYVAR}") # Use indirect expansion to get contents of array, store as new array 
    echo "No of array elements: ${#ARRAY[@]}" 
    echo "Array content: ${ARRAY[@]}" 
} 


ORADATA=(
"oraserver/content:abcDaily/ORAServer/" 
"oraserver/w3s-ix86:abcDaily/ORAServer/" 
) 

SQLDATA=(
"sqlserver/content:abcDaily/SQLServer/" 
"sqlserver/w3s-ix86:abcDaily/SQLServer/" 
) 

process_data $APP # Note that APP is not an array, so the [@] bit was irrelevant 

實施例:

$ ./testarray.sh ORADATA 
No of array elements: 2 
Array content: oraserver/content:abcDaily/ORAServer/ oraserver/w3s-ix86:abcDaily/ORAServer/ 
+0

它也可以。 :)感謝評論戈登。他們相當有幫助。 – Technext

2

下面是修改過的腳本工程(與可怕的eval幫助):

#!/bin/bash 

APP=$1 

process_data() { 
    ARRAY=($(eval echo \${$1[@]})) 
    echo "No of array elements: ${#ARRAY[@]}" 
    echo "Array content: ${ARRAY[@]}" 
} 

ORADATA=(
"oraserver/content:abcDaily/ORAServer/" 
"oraserver/w3s-ix86:abcDaily/ORAServer/" 
) 

SQLDATA=(
"sqlserver/content:abcDaily/SQLServer/" 
"sqlserver/w3s-ix86:abcDaily/SQLServer/" 
) 

process_data ${APP[@]} 

OUTPUT:

No of array elements: 2 
Array content: oraserver/content:abcDaily/ORAServer/ oraserver/w3s-ix86:abcDaily/ORAServer/ 
+0

由於anubhava !它按預期工作。 – Technext

相關問題