A construção variable=$(...) receberá a saída padrão de qualquer comando em $(...) e a atribuirá a variable . Assim, para obter variable atribuído da maneira desejada, os valores devem ser enviados para a saída padrão. Isso é feito facilmente com o comando echo :
color_code=$(case "$COLOR" in
red) echo 1;;
yellow) echo 2;;
green) echo 3;;
blue) echo 4;;
esac)
Isso funcionará no bash , bem como em todos os outros POSIX shells.
Os Parêntesis Esquerdos Opcionais
De acordo com o padrão POSIX, os parentes esquerdos em uma instrução case são opcionais e o seguinte também funciona:
color_code=$(case "$COLOR" in
(red) echo 1;;
(yellow) echo 2;;
(green) echo 3;;
(blue) echo 4;;
esac)
Como Gilles aponta nos comentários, nem todos os shells aceitam ambas as formas em combinação com $(...) : para uma tabela impressionantemente detalhada de compatibilidade, veja " $ () "substituição de comando vs. incorporado") ".