color_code=$(…)
menugaskan output dari …
perintah ke variabel color_code
, dengan baris baru dilucuti. Jadi, Anda perlu menghasilkan beberapa output. Kode yang Anda tulis mencoba dieksekusi 1
sebagai perintah.
Anda bisa menggunakan idiom ini. Catatan yang color_code
akan kosong jika $COLOR
tidak ada nilai yang didukung.
color_code=$(case "$COLOR" in
(red) echo 1;;
(yellow) echo 2;;
(green) echo 3;;
(blue) echo 4;;
esac)
Tapi itu tidak terlalu idiomatis. Bahasa shell diarahkan untuk kombinasi sederhana dari perintah sederhana. Substitusi perintah besar ini canggung. Substitusi perintah membuat subkulit, yang lebih lambat daripada metode langsung:
case "$COLOR" in
red) color_code=1;;
yellow) color_code=2;;
green) color_code=3;;
blue) color_code=4;;
esac
Perbedaan semantik utama antara dua pendekatan adalah yang $(…)
menciptakan subkulit, sehingga setiap penugasan, keluar, redirection, dll. Yang dilakukan di dalam tidak memiliki efek di luar.
(
. Kalau tidak, tidak apa-apa.