在bash脚本中访问关联数组

时间:2013-09-11 20:30:51

标签: arrays linux bash

我有两个bash脚本,一个包含两个数组,其中第一个数组的值是第二个数组的键。在另一个脚本中,我需要使用第一个数组的每个值和第二个数组中该键的值来调用外部脚本。

第一个(配置)脚本:

#! /bin/bash

PROC[0]="sshd"
PROC_PID[sshd]="/var/run/sshd.pid"

PROC[1]="openvpn"
PROC_PID[openvpn]="/var/run/openvpn.server.pid"

第二个脚本:

#! /bin/bash
. ./config

for proc in ${PROC[@]}
do
    echo "$proc";
    echo "$PROC_PID[$proc]";
    /call/to/external/script $proc $PROC_PID[$proc]
done

调用第二个脚本时,我得到了这个输出:

sshd
/var/run/openvpn.pid[sshd]
....
openvpn
/var/run/openvpn.pid[openvpn]
....

我只是想不通,如何从与PROC数组中的键相关联的PROC_PID数组中访问该值。我做错了什么?

2 个答案:

答案 0 :(得分:1)

这就是你get data from associative arrays

的方式
echo "${PROC_PID[$proc]}"
/call/to/external/script $proc "${PROC_PID[$proc]}"

这是你的脚本正确引用:

for proc in "${PROC[@]}"
do
    echo "$proc"
    echo "${PROC_PID[$proc]}"
    /call/to/external/script "$proc" "${PROC_PID[$proc]}"
done

你也可以

PROC[0]='sshd'
PROC_PID[${PROC[0]}]='/var/run/sshd.pid'

这也是有效的:

PROC[0]='sshd'
PROC_PID[PROC[0]]='/var/run/sshd.pid'

答案 1 :(得分:1)

在第一个脚本中,您应该将变量声明为关联数组:

#! /bin/bash

declare -A PROC PROC_PID

PROC[0]="sshd"
PROC_PID[sshd]="/var/run/sshd.pid"

PROC[1]="openvpn"
PROC_PID[openvpn]="/var/run/openvpn.server.pid"

在第二个脚本中,您需要正确使用大括号。并引用你的变量。

#! /bin/bash
. ./config

for proc in "${PROC[@]}"
do
    echo "$proc";
    echo "${PROC_PID[$proc]}";
    /call/to/external/script "$proc" "${PROC_PID[$proc]}"
done