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") ".