Bash for loop, показывающий ненужные файлы / каталоги - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь запустить простой цикл над некоторыми локальными ветками git, но всякий раз, когда я запускаю цикл и отображаю строки, я вижу, что он повторяет все файлы / каталоги в моем текущем рабочем каталоге.У меня нет особого опыта работы с bash, поэтому я запутался, почему результаты будут другими.

git branch --merged

показывает мне то, что я ожидаю, только ветви.

for l in $( git branch --merged ); do echo $l; done

Это первоепоказывая все файлы / каталоги, а затем ветви, которые я не хочу перебирать.

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Текущая ветвь отмечена *, это интерпретируется как шаблон, который соответствует всем файлам (ожидайте те, которые начинаются с .).Я вижу сразу два варианта:

  1. Заменить Внутренний разделитель полей только на новую строку.

    IFS='
    '
    for l in $(git branch --merged); do echo $l; done
    
  2. Удалите * из результата.

    for l in $(git branch --merged | tr -d '*'); do echo $l; done
    
0 голосов
/ 23 октября 2018

* будет расширен как шар.Чтобы избежать этого, вам нужно процитировать расширение $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, где обычно ожидается имя файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...