color_code=$(…)
asigna la salida del …
comando a la variable color_code
, con nuevas líneas finales eliminadas. Entonces necesita producir algo de salida. El código que escribió intenta ejecutar 1
como un comando.
Puedes usar este idioma. Tenga en cuenta que color_code
estará vacío si $COLOR
ninguno de los valores es compatible.
color_code=$(case "$COLOR" in
(red) echo 1;;
(yellow) echo 2;;
(green) echo 3;;
(blue) echo 4;;
esac)
Pero no es muy idiomático. El lenguaje shell está orientado a combinaciones simples de comandos simples. Esta gran sustitución de comando es incómoda. La sustitución del comando crea una subshell, que es más lenta que el método directo:
case "$COLOR" in
red) color_code=1;;
yellow) color_code=2;;
green) color_code=3;;
blue) color_code=4;;
esac
La principal diferencia semántica entre los dos enfoques es que $(…)
crea una subshell, de modo que cualquier asignación, salida, redirección, etc. que se realice adentro no tiene efecto afuera.
(
s extra . De lo contrario, está bien.