-1

我有两个 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 数组中的值。我究竟做错了什么?

4

2 回答 2

1

这就是您从关联数组中获取数据的方式:

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'
于 2013-09-11T20:32:33.823 回答
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
于 2013-09-11T20:47:08.257 回答