Сообщение Git о фиксации ошибочно при сохранении в переменной

У меня есть коммит Git, в котором есть резюме, а затем некоторое описание. Когда я вижу сообщение о фиксации через git log --format=%B -n 1 <commit>, оно выглядит так:

Commit Summary Line * Commit Description Line 1 * Commit Description Line 2 * Commit Description Line 3

Однако когда я пытаюсь сохранить это в переменной Bash, таким образом:

message=$(git log --format=%B -n 1 <commit>)

а затем я пытаюсь echo $message, я получаю имена папок из моего текущего каталога, смешанные с каждой строкой из сообщения фиксации. Более того, я даже не вижу всех строк из сообщения фиксации, только некоторые из них. Итак, $message выглядит примерно так:

Commit Summary Line folder1 folder2 folder3 Commit Description Line 1 folder1 folder2 folder3 Commit Description Line 3

Есть ли объяснение такому поведению? Я просто хочу, чтобы у $message были все строки из полного сообщения фиксации. Меня даже не волнует, находятся ли они в новых строках или все в одной строке, я просто хочу, чтобы все строки сохранялись в строковой переменной. Как мне этого добиться?


person lebowski    schedule 13.12.2017    source источник
comment
Как я всегда говорю, когда сомневаешься ... цитируй!   -  person Travis Clarke    schedule 13.12.2017


Ответы (1)


Кажется, что это немного изворотливо, расширение имени пути на играть здесь вызвано *. Попробуйте добавить пару кавычек вокруг своей переменной message, и все будет хорошо!

echo "$message" 
person Travis Clarke    schedule 13.12.2017
comment
В сценариях оболочки использование переменных без защиты их двойными кавычками почти всегда является ошибкой - есть много способов, чтобы что-то пошло не так! - person Gordon Davisson; 13.12.2017
comment
@GordonDavisson - мудрые слова, друг мой! Я не могу сосчитать, сколько раз пропущенные цитаты испортили мне день. - person Travis Clarke; 13.12.2017