Когда $(git branch)
расширяется для цикла for
, чтобы зациклиться на нем, он расширяется до многострочной строки -
branch1
* branch2
master
Поскольку подстановка команды не заключена в кавычки, она затем разбивается на пробелы, табуляции и новые строки (по умолчанию )на четыре слова
branch1 * branch2 master
Каждое слово затем подвергается генерации имени файла (подстановке ). Второе слово, *
, будет заменено всеми (не -скрытыми )именами файлов в вашем текущем каталоге. Похоже, это имя одного файла только в вашем случае, README.txt
.
Таким образом, окончательный список, по которому будет проходить цикл, будет
branch1 README.txt branch2 master
Вместо этого, если вы хотите просто вывести это в скрипт, используйте
git branch
ничего больше не делая.
Если вы хотите сохранить вывод в переменной, используйте
branches=$( git branch )
Вы хотите получить имя текущей ветки, а затем извлечь ветку, имя которой предшествует*
:
curr_branch=$( git branch | awk '/^\*/ { print $2 }' )
Если вы хотите перебрать вывод git branch
, используйте цикл while
:
git branch |
while read -r star name; do
if [ -z "$name" ]; then
name=$star
printf 'One branch is "%s"\n' "$name"
else
printf 'The current branch is "%s"\n' "$name"
fi
done
Вы также можете использовать git branch --show-current
для прямого получения имени текущей ветки.