Как добраться, имя текущего мерзавца переходят в переменную в сценарии оболочки? [дубликат]

Этот вопрос уже имеет ответ здесь:

Я являюсь новым для окружения сценариев и не могу понять это. Если Вы незнакомы, ответвление мерзавца команды возвращает что-то как

* develop
  master

, где звездочка отмечает, в настоящее время проверял ответвление. Когда я выполняю следующее в терминале:

git branch | grep "*"

Я добираюсь:

* develop

как ожидалось.

Однако, когда я работаю

test=$(git branch | grep "*")

или

test=`git branch | grep "*"`

И затем

echo $test

, результатом является просто список файлов в каталоге. Как мы делаем значение теста = "*, разрабатывают"?

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

currentBranch=${test:2} 

Я играл вокруг с той функцией подстроки, и я получил "плохую замену" ошибки много, и не знайте почему.

69
задан Ben 21 January 2010 в 16:49
поделиться

4 ответа

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

Это будет эхо «мастер», как вы хотели.

87
ответ дан 24 November 2019 в 13:36
поделиться

Я бы использовал команду команда Git-Symbolic-Ref в ядре GIT. Если вы скажете Глава Git-Symbolic-ref , вы получите название текущего ветви.

30
ответ дан 24 November 2019 в 13:36
поделиться

Проблема полагается на:

echo $test

на самом деле, тест переменного содержит подстановочный знак, который расширяется оболочкой. Чтобы избежать того, чтобы просто защитить $ тестировать с двойными кавычками:

echo "$test"
7
ответ дан 24 November 2019 в 13:36
поделиться

Отключить расширение штока Subshell,

test=$(set -f; git branch)
1
ответ дан 24 November 2019 в 13:36
поделиться