*
будет расширен как шар.Чтобы избежать этого, вам нужно процитировать расширение $l
.
# Partial fix
for l in $(git branch --merged); do echo "$l"; done
Подождите, это не работает.Вам также нужно избегать расширения $(...)
, что более сложно.Для этого вы можете (временно) отключить глобализацию:
# Works, but clumsy
set -o noglob
for l in $(git branch --merged); do echo "$l"; done
Не идеально: он печатает *
и master
в отдельных строках.Это также изменяет глобальную опцию, которая влияет на другие команды.Лучше оставить параметры оболочки в покое и вместо этого использовать цикл while read
.
# Best
while IFS= read -r l; do
echo "$l"
done < <(git branch --merged)
Здесь есть два хитрых момента.Один использует while read; do ...; done < file
для чтения строк из файла.Синтаксис странный, но он применяет перенаправление < file
ко всему циклу.Другой бит использует <(...)
подстановка процесса для использования вывода git branch --merged
, где обычно ожидается имя файла.