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
Основное семантическое различие между этими двумя подходами заключается в том, что $(…)
создается подоболочка, так что любое присвоение, выход, перенаправление и т. Д., Которые выполняются внутри, не оказывают влияния снаружи.
(
с. В противном случае это нормально.