O problema é que o shell expande primeiro a cadeia de aspas duplas e, em seguida, envia a string expandida como um parâmetro para sed. Sed não sabe como expandir variáveis de shell, no entanto.
Você deve conseguir fazer isso em awk
diretamente, embora:
category=(red amber green)
awk -f <( # This generates the awk code:
echo '{';
for (( i=0; i<${#category[@]}; i++ )) ; do
echo category"[$i]"=\"${category[$i]}\"
done
echo 'print $1, category[$1]}'
) <( # This is the input file.
echo 0; echo 1 ; echo 2 )