0

Оператор двоеточия в подстановке переменных Bash?

9

У меня есть унаследованный bash-код, и две строки из него вызывают у меня недоумение:

branch_name=`git describe --contains --all HEAD`
branch_name=${branch_name:-HEAD}

Мое понимание оператора двоеточия (:) заключается в том, что он создает подстроку на основе индекса, поэтому использование строки -HEAD в данном случае не имеет смысла.

Не могли бы вы объяснить, что именно происходит в этих строках кода?

1 ответ(ов)

0

В Bash выражение ${VAR1:-VAR2} эквивалентно SQL-функции coalesce(VAR1, VAR2) или оператору C# VAR1 ?? VAR2.

В вашем случае:

branch_name=`git describe --contains --all HEAD`
branch_name=${branch_name:-HEAD}

На первой строке выполняется команда git, и результат присваивается переменной branch_name. На второй строке происходит операцией коалесценции: если branch_name имеет значение null, ей присваивается значение HEAD.

Как вы уже упомянули, ${VAR1:NUM} — это операция получения префикса строки (left в SQL). Однако при использовании отрицательного числа, как в ${VAR1: -NUMBER}, это превращается в операцию суффикса (right). Обратите внимание на пробел перед знаком минус: если вы пропустите этот пробел, выражение будет аналогично операции коалесценции, о которой я говорил ранее.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь