Почему бы вам просто не использовать bash-массивы?:
PROCESS=(sshd snmpd)
for i in $(seq 0 $((${#PROCESS[@]}-1)));do
PID[$i]=$(pgrep "${PROCESS[$i]}")
TCP[$i]=$(netstat -anlp | grep ${PID[$i]})
done
echo ${#PID[0]} ${#TCP[0]} ${#PID[1]} ${#TCP[1]}
Использовать bash-ассоциативные массивы для развлечения:
PROCESS=(sshd snmpd)
declare -A PID TCP
for i in ${PROCESS[@]};do
PID[$i]=$(pgrep "$i")
TCP[$i]=$(netstat -anlp | grep ${PID[$i]})
done
echo ${#PID[sshd]} ${#TCP[sshd]} ${#PID[snmpd]} ${#TCP[snmpd]}
Использовать объявить, получить значение переменной с помощью косвенной ссылки, еслиВы должны:
PROCESS=(sshd snmpd)
for i in $(seq 0 $((${#PROCESS[@]}-1)));do
declare PID$i="$(pgrep "${PROCESS[$i]}")"
ref=PID$i
declare TCP$i="$(netstat -anlp | grep ${!ref})"
done
echo ${#PID0} ${#TCP0} ${#PID1} ${#TCP1}
Никогда не используйте eval:
PROCESS=(sshd snmpd)
for i in $(seq 0 $((${#PROCESS[@]}-1)));do
eval "PID$i=\"$(pgrep "${PROCESS[$i]}")\""
eval "TCP$i=\"\$(netstat -anlp | grep \$PID$i)\""
done
echo ${#PID0} ${#TCP0} ${#PID1} ${#TCP1}