color_code=$(…)
gán đầu ra của …
lệnh cho biến color_code
, với các dòng mới cuối cùng bị loại bỏ. Vì vậy, bạn cần phải sản xuất một số đầu ra. Mã bạn đã viết cố gắng thực thi 1
như một lệnh.
Bạn có thể sử dụng thành ngữ này. Lưu ý rằng color_code
sẽ trống nếu $COLOR
không có giá trị nào được hỗ trợ.
color_code=$(case "$COLOR" in
(red) echo 1;;
(yellow) echo 2;;
(green) echo 3;;
(blue) echo 4;;
esac)
Nhưng nó không phải là rất thành ngữ. Ngôn ngữ shell hướng đến sự kết hợp đơn giản của các lệnh đơn giản. Sự thay thế lệnh lớn này là khó xử. Việc thay thế lệnh tạo ra một lớp con, chậm hơn so với phương thức đơn giản:
case "$COLOR" in
red) color_code=1;;
yellow) color_code=2;;
green) color_code=3;;
blue) color_code=4;;
esac
Sự khác biệt về ngữ nghĩa chính giữa hai cách tiếp cận là $(…)
tạo ra một lớp con, sao cho mọi phép gán, thoát, chuyển hướng, v.v. được thực hiện bên trong không có tác dụng bên ngoài.
(
s. Nếu không, nó ổn.