color_code=$(…)
atribui a saída do …
comando à variável color_code
, com as novas linhas finais removidas. Então você precisa produzir alguma saída. O código que você escreveu tenta executar 1
como um comando.
Você pode usar esse idioma. Observe que color_code
ficará vazio se $COLOR
nenhum dos valores suportados.
color_code=$(case "$COLOR" in
(red) echo 1;;
(yellow) echo 2;;
(green) echo 3;;
(blue) echo 4;;
esac)
Mas não é muito idiomático. A linguagem shell é voltada para combinações simples de comandos simples. Essa grande substituição de comando é estranha. A substituição do comando cria um subshell, que é mais lento que o método direto:
case "$COLOR" in
red) color_code=1;;
yellow) color_code=2;;
green) color_code=3;;
blue) color_code=4;;
esac
A principal diferença semântica entre as duas abordagens é que $(…)
cria um subshell, de forma que qualquer atribuição, saída, redirecionamento etc. executada por dentro não tem efeito externo.
(
s extras . Caso contrário, está tudo bem.