Этот вопрос уже имеет ответ здесь:
Я являюсь новым для окружения сценариев и не могу понять это. Если Вы незнакомы, ответвление мерзавца команды возвращает что-то как
* develop
master
, где звездочка отмечает, в настоящее время проверял ответвление. Когда я выполняю следующее в терминале:
git branch | grep "*"
Я добираюсь:
* develop
как ожидалось.
Однако, когда я работаю
test=$(git branch | grep "*")
или
test=`git branch | grep "*"`
И затем
echo $test
, результатом является просто список файлов в каталоге. Как мы делаем значение теста = "*, разрабатывают"?
Тогда следующий шаг (как только мы добираемся "*, разрабатывают" в переменную, названную тестом), должен получить подстроку. Это просто было бы следующим?
currentBranch=${test:2}
Я играл вокруг с той функцией подстроки, и я получил "плохую замену" ошибки много, и не знайте почему.
The * расширяется, что вы можете сделать, это использовать SED вместо GREP и немедленно получить имя отделения:
branch=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')
и версию с использованием GIT Symeric-Ref, как предложено разработать Noufal Ibrahim
branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')
Расширение, (как уже сделали, как это делал Марко). Расширение происходит в эхо, когда вы делаете Echo $ Test
с $ Test, содержащим «* Master», то * расширяется в соответствии с нормальными правилами расширения. Для подавления этого придется процитировать переменную, как показано Marco: Echo "$ test"
. В качестве альтернативы, если вы избавитесь от звездочки, прежде чем повторять это, все будет хорошо, например ECHO $ {TEST: 2}
будет просто эхо «мастер». В качестве альтернативы вы можете назначить его заново, как вы уже предложили:
branch=${test:2}
echo $branch
Это будет эхо «мастер», как вы хотели.
Я бы использовал команду команда Git-Symbolic-Ref
в ядре GIT. Если вы скажете Глава Git-Symbolic-ref
, вы получите название текущего ветви.
Проблема полагается на:
echo $test
на самом деле, тест переменного содержит подстановочный знак, который расширяется оболочкой. Чтобы избежать того, чтобы просто защитить $ тестировать с двойными кавычками:
echo "$test"
Отключить расширение штока Subshell,
test=$(set -f; git branch)