obrigado pela entrada e comentários de todos. Um elemento adicional para a entrada que eu não mencionei é um prefixo que separa os tipos de processo, então eles não são apenas todos "BOX". Exemplo de entrada ps
BOX.CC_Container_Philips1_Primary_X1
BOX.CC_Container_Philips_Primary_X1
BOX.CC_Container_Philips3_Primary_X1
BOX.Container_Server1_X1
BOX.Container_Node1_X1
BOX.Container_Host1_X1
BOX.Container_ClockService1_X1
BOX.Container_ClockService2_X1
Então, o que acabei fazendo é escrever uma condicional com base no tipo (é "CC" ou não?) e, em seguida, executando loops separados sobre isso. Pode não ser o melhor método, mas funciona.
#name = list of process names from SQL, parsed into an array
type=$(echo "${name}" | awk -F"_" '{print $1}')
if [[ "${type}" == "CC" ]]; then
while read -r line
do
running+=("${line}")
done < <(ps -u esmadmin -f | grep "${DOMAIN}.${name}_" | grep -v grep)
else
while read -r line
do
running+=("${line}")
done < <(ps -u esmadmin -f | grep "${DOMAIN}.${name}" | grep -v grep)
fi