По какой-то причине это назначение: OUT=$(git describe HEAD) печатает на стандартный вывод (например): fatal: No names found, cannot describe anything.
Это нормальное поведение? Почему этого не происходит с другими командами?
Это на самом деле вывод stderr , а не stdout . При запуске команды из интерактивного терминала и stdout и stderr настроены на переход в терминал.
Если вы хотели получить вывод stderr в своей переменной (что, вероятно, нет, но в любом случае), перенаправьте его на stdout следующим образом:
OUT=$(git describe HEAD 2>&1)
Или, если вы не хотите, чтобы человек, выполняющий ваш скрипт, видел вывод stderr , выбросьте его так:
OUT=$(git describe HEAD 2>/dev/null)