bash test - corresponde às barras [fechadas]

0

Eu tenho um nome de ramificação do git:

current_branch='oleg/feature/1535693040'

Eu quero testar se o nome da ramificação inclui / feature /, então eu uso:

if [ "$current_branch" != */feature/* ] ; then
  echo "Current branch does not seem to be a feature branch by name, please check, and use --force to override.";
  exit 1;
fi

mas esse nome de ramificação não corresponde ao regex, por isso estou saindo com 1, alguém sabe por quê?

    
por Alexander Mills 01.09.2018 / 01:13

1 resposta

1

Eu tenho uma resposta para isso no StackOverflow: link

a resposta é:

[ ] é o test(1) comando , que não manipula padrões da mesma maneira o bash faz. Em vez disso, use a expressão condicional do bash [[ ]] do colchete duplo. Exemplo:

$ current_branch='oleg/feature/1535693040'
$ [ "$current_branch" = '*/feature/*' ] && echo yes
$ [[ $current_branch = */feature/* ]] && echo yes
yes

Editar com regexes:

$ [[ $current_branch =~ /feature/ ]] && echo yes
yes

O regex pode corresponder a qualquer lugar, portanto, você não precisa do% e do* inicial e final (que seria .* em um regex).

CUIDADO: as barras aqui não são delimitadores para o regex, mas os literais a serem correspondidos em algum lugar da string. Por exemplo, [[ foo/bar =~ / ]] retorna verdadeiro. Isso é diferente da notação regex em vários idiomas.

    
por 01.09.2018 / 01:44