我有两个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数组中访问该值。我做错了什么?
答案 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