The masalah adalah bahwa dalam Bash setiap perintah hanya memiliki satu kode keluar. Ketika Anda export foo="$(false)"kode keluar falsehanya dibuang. Jika Anda melakukannya
foo="$(false)"
export foo
perintah pertama yang gagal dapat ditindaklanjuti, misalnya dengan errexitpengaturan.
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 pipefaildi man bashuntuk 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