sh test duas condições obtém [: ausente ']' [fechado]

0

Eu tenho um erro que é difícil de limpar. Tudo o que deveria acontecer é testar duas condições e depois fazer alguma coisa. O objetivo é que esteja vazio ou seja um jogo.

if [ -z "$_BRANCH"  ] || [[ "$_BRANCH" = "master" ]]; then
    _FOE_BRANCH="master"
    [ -s "$module_dir/branch.gitploy" ] && _FOE_BRANCH=$(cat "$module_dir/branch.gitploy")
    [ "$_FOE_BRANCH" -ne "master"] && _BRANCH=$_FOE_BRANCH
fi

por algum motivo, recebo esse erro

[: missing ']'

para esta linha

if [ -z "$_BRANCH"  ] || [[ "$_BRANCH" = "master" ]]; then

mas enquanto eu leio para tentar limpá-lo, continuo fazendo loops. Eu esperava que tudo estivesse bem com base no link .

Eu queria dizer que eu olhei para as postagens semelhantes e não publiquei isso com muitas correções que falharam, então, até onde eu vejo, atm, isso não é uma duplicata para Erro de Bash se a declaração [: ausente ']' ou Brackets na condição if: por que estou recebendo erros de sintaxe sem espaço em branco? , tanto quanto eu posso dizer não há nenhum problema de espaço em branco como eles tinham nas respostas. Acredito que tenho uma correspondência no léxico e acho que é uma questão diferente e preciso de uma solução.

    
por jeremy.bass 18.01.2015 / 03:30

1 resposta

5

Tem certeza de que o erro é para a primeira linha? O último teste está faltando um espaço. Mudar

[ "$_FOE_BRANCH" -ne "master"] && _BRANCH=$_FOE_BRANCH

para

[ "$_FOE_BRANCH" -ne "master" ] && _BRANCH=$_FOE_BRANCH

Além disso, como você está falando de sh , que pode não ser necessariamente bash, você pode alterar a primeira linha para continuar usando [ em vez de [[ , o que pode não funcionar em alguns conchas:

if [ -z "$_BRANCH"  ] || [ "$_BRANCH" = "master" ]; then
    
por 18.01.2015 / 03:38