The masalah adalah bahwa dalam Bash setiap perintah hanya memiliki satu kode keluar. Ketika Anda export foo="$(false)"
kode keluar false
hanya dibuang. Jika Anda melakukannya
foo="$(false)"
export foo
perintah pertama yang gagal dapat ditindaklanjuti, misalnya dengan errexit
pengaturan.
Mendeklarasikan dan menetapkan string literal seperti export foo='bar'
tentu saja tidak menderita masalah ini. Tetapi perubahan adalah satu-satunya yang konstan dalam pengembangan perangkat lunak, dan ini adalah pemeliharaan yang baik untuk pernyataan di masa depan dengan memisahkannya.
Selain perintah khusus tugas yang Anda sebutkan, ada juga beberapa perintah dalam satu tugas seperti foo="$(false)$(true)"
. Lihat pipefail
di man bash
untuk lain perangkap tersebut.
Hal lain yang perlu diingat adalah bahwa urutan deklarasi dan penugasan terkadang relevan. Misalnya, Anda ingin mendeklarasikan variabel sebelum menetapkannya. (Sayangnya tidak mungkin untuk mendeklarasikan variabel sebelum menetapkannya untuk pertama kalinya.)local
readonly