Оператор двоеточия в подстановке переменных 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