Intereting Posts
будет хвост с трубопроводом читать весь файл? Не показывать тома как безопасно съемные для системного диска, установленного во внешнем корпусе USB Как я могу использовать один и тот же IP-адрес из Интернета и интрасети? Измените, какая клавиша является первичной и какая вторичная (необходимо удерживать Shift для доступа) logrotate custom "rotate" эквивалент действия для выскочки? Как извлечь файлы в каталог «/ usr» без переопределения других файлов? sudo: невозможно разрешить хост "hostname" Рекурсивное копирование каталогов с заданным именем Целочисленные входные ограничения Я хочу попробовать AIX в своем компьютере, могу ли я подражать ей или заставить ее работать по очень доступной цене? Только загрузка GRUB автоматически Какой пакет содержит ddate? Linux Mint 13 Xfce – используйте Super_L в нескольких ярлыках Foldername в качестве параметра Минимизировать PHP.CGI.Argument.Injection и дальнейшее упрощение веб-сервера Centos 6.4

Объединить несколько строк в строку со специальными символами

Скажем, у меня есть эти команды Bash:

$ sha="$(git log --all --format=format:%H -n 1 -- .npp.json)" $ git branch --contains "$sha" | tr -d " *" 

прямо сейчас это может войти что-то вроде:

 master dev remotes/origin/foo 

мой вопрос – есть ли какая-нибудь утилита Bash, которая может объединить все выходные данные для меня, чтобы я получил что-то вроде этого:

 master:dev:remotes/origin/foo 

утилита может выглядеть так:

 $ git branch --contains "$sha" | tr -d " *" | concat ":" 

конечно, конечное значение должно быть отражено, поэтому оно может выглядеть так:

 $ result="$(git branch --contains "$sha" | tr -d " *" | concat ":")" $ echo "$result" 

Если вы спрашиваете, как изменить

 master dev remotes/origin/foo 

в

 master:dev:remotes/origin/foo 

тогда tr '\n' : будет classический UNIXy способ сделать это.

Что касается обрезки возможного финального перехода на новую строку, вы можете сначала сохранить вывод в переменную с помощью $() и $() удалит его, или вы можете выполнить подстановку, сохранить результат в переменной, а затем сделать variable=${variable%:} чтобы обрезать ее в конце двоеточия. (См. https://stackoverflow.com/questions/1654021/how-can-i-delete-a-newline-if-it-is-the-last-character-in-a-file для получения дополнительной информации.)

В моем случае использование разделения на пробельные символы будет работать, так как ветви git не могут содержать пробельные символы.

Так что я могу сделать это:

 git branch --contains "$sha" | tr -d " *" | xargs 

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