Проблема в том , что в Bash каждая команда имеет только один код выхода. Когда вы export foo="$(false)"
выходной код false
просто отбрасывается. Если вы вместо этого делаете
foo="$(false)"
export foo
на первую неудачную команду можно воздействовать, например, errexit
настройкой.
Объявление и назначение строкового литерала, такого как export foo='bar'
, конечно, не страдает от этой проблемы. Но изменения - это единственная постоянная составляющая в разработке программного обеспечения, и это просто хорошая домашняя работа, чтобы разделить их на будущее.
В дополнение к конкретным командам назначения, о которых вы упоминаете, в одном назначении также есть несколько команд, например foo="$(false)$(true)"
. См pipefail
в man bash
течение еще одной такой ловушки.
Также следует помнить, что последовательность объявления и присваивания иногда важна. Например, вы хотите объявить переменные перед их назначением. (К сожалению, невозможно объявить переменные перед их назначением в первый раз.)local
readonly