Проблема в тому , що в Bash кожна команда має тільки один код виходу. Коли ви export foo="$(false)"
вихідний код false
просто викидаєте. Якщо ви замість цього зробите
foo="$(false)"
export foo
невдала перша команда може діяти, наприклад, шляхом errexit
встановлення.
Оголошення та призначення рядкового букваря, такого як export foo='bar'
, звичайно, не страждає від цієї проблеми. Але зміни є єдиною постійною умовою в розробці програмного забезпечення, і це просто добре ведення таких завдань, які підтверджують майбутнє, розділяючи їх.
На додаток до конкретних команд для призначення, які ви згадуєте, в одному призначенні також є кілька команд, таких як foo="$(false)$(true)"
. Див pipefail
в man bash
протягом ще однієї такої пастки.
Ще слід пам’ятати, що послідовність декларування та призначення іноді є актуальною. Наприклад, вам потрібно буде оголосити змінні перед їх призначенням. (На жаль, неможливо оголосити змінні перед тим, як призначити їх вперше.)local
readonly