color_code=$(…)присваивает выходные данные …команды переменной color_code, с окончательными символами новой строки. Так что вам нужно произвести какой-то вывод. Код, который вы написали, пытается выполнить 1как команду.
Вы можете использовать эту идиому. Обратите внимание, что color_codeбудет пустым, если $COLORне поддерживается ни одно из поддерживаемых значений.
color_code=$(case "$COLOR" in
(red) echo 1;;
(yellow) echo 2;;
(green) echo 3;;
(blue) echo 4;;
esac)
Но это не очень идиоматично. Язык оболочки ориентирован на простые комбинации простых команд. Эта большая командная замена неудобна. Подстановка команд создает подоболочку, которая медленнее, чем простой метод:
case "$COLOR" in
red) color_code=1;;
yellow) color_code=2;;
green) color_code=3;;
blue) color_code=4;;
esac
Основное семантическое различие между этими двумя подходами заключается в том, что $(…)создается подоболочка, так что любое присвоение, выход, перенаправление и т. Д., Которые выполняются внутри, не оказывают влияния снаружи.
(с. В противном случае это нормально.