2012-08-03 157 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)"