2012-08-03 160 views
0

你好,我想問一個重複的問題herebash腳本變量數組名

我有四個服務器在bash腳本中定義如下代碼。 對於每個服務器,我想維護我已經啓動的進程的ID。 僅用於測試,我想用10 20 30 40初始化每個陣列。 然後看看我是否可以按預期訪問這些元素。但是我無法訪問這些元素。 有人能告訴我我究竟做錯了什麼。

#!/bin/bash 
SERVER_LIST=("server1" "server2" "server3") 

for server in ${SERVER_LIST[@]} ; do 
    echo $server 
    arrayName=$server"process" 
    echo $arrayName 
    set -a "$arrayName=(10 20 30 40)" 
done 

current_sever=${SERVER_LIST[0]} 
arrayName=$current_server"process" 
# The attempt below is failing. 
eval "echo Server ${current_server} \${$arrayName[*]}" 
echo $(eval echo \${arrayName[*]})Server server1 

server1process

它給我的輸出如下 -

服務器server1的

server1process

有人可以幫助請。 也可以請你告訴我如何追加新的元素到數組? 我嘗試以下,但它不工作 -

sleep 10 & 
arrayName=$current_server"process" 
eval "\${$arrayName[*]}+=$!" 
+3

請參見[BashFAQ/005](HTTP: //mywiki.wooledge.org/BashFAQ/005)和[BashFAQ/006](http://mywiki.wooledge.org/BashFAQ/006)。 – 2012-08-03 22:32:51

+0

[Bash:使用變量作爲數組名稱]的可能重複(http://stackoverflow.com/questions/8045474/bash-use-a-variable-as-an-array-name) – 2012-08-06 04:13:35

回答

1

嘗試更換線路8:與

set -a "$arrayName=(10 20 30 40)" 

eval "$arrayName=(10 20 30 40)"