Оператор двоеточия в подстановке переменных Bash?
У меня есть унаследованный bash-код, и две строки из него вызывают у меня недоумение:
branch_name=`git describe --contains --all HEAD`
branch_name=${branch_name:-HEAD}
Мое понимание оператора двоеточия (:
) заключается в том, что он создает подстроку на основе индекса, поэтому использование строки -HEAD
в данном случае не имеет смысла.
Не могли бы вы объяснить, что именно происходит в этих строках кода?
1 ответ(ов)
В 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
). Обратите внимание на пробел перед знаком минус: если вы пропустите этот пробел, выражение будет аналогично операции коалесценции, о которой я говорил ранее.
Извлечение имени файла и расширения в Bash
Как проверить, установленна ли переменная в Bash
Многострочная строка с дополнительными пробелами (сохраняем отступы)
Как интерполировать переменные в строках JavaScript без конкатенации?
Как вернуть строковое значение из функции Bash