Múltiplas instruções de comparação no bash fail - bash: [: missing ']'

1

Eu preciso comparar uma variável com várias variáveis, conforme mostrado abaixo.

if [ [ "$SECONDS" -ne "$one" || "$SECONDS" -ne "$two" ] ]

Esta afirmação está me dando o erro

[: missing ']'

Como posso comparar o valor a SECONDS para um e dois. Todos estes são comparação inteira.

    
por Ashish Kurian 09.05.2017 / 14:15

2 respostas

3

A sintaxe correta de if para expresões em bash é esta referência :

Tabela 7-2. Combinando expressões

Operation                  Effect
------------------    ------------------
[ ! EXPR ]            True if EXPR is false.
[ ( EXPR ) ]          Returns the value of EXPR. This may be used to override the normal precedence of operators.
[ EXPR1 -a EXPR2 ]    True if both EXPR1 and EXPR2 are true.
[ EXPR1 -o EXPR2 ]    True if either EXPR1 or EXPR2 is true.

sua declaração if deve ser assim:

if [ "$SECONDS" -ne "$one" -o "$SECONDS" -ne "$two" ]

    
por Ghasem Pahlavan 09.05.2017 / 14:32
2

Você também pode usar a palavra-chave [[ :

if [[ "$SECONDS" -ne "$one" || "$SECONDS" -ne "$two" ]];

Aqui está o gráfico help [[ :

 EXPR1 && EXPR2   True if both EXPR1 and EXPR2 are true; else false
 EXPR1 || EXPR2   True if either EXPR1 or EXPR2 is true; else false

Quando você inicia sua instrução usando [ , o espaço e outro [ ; O Bash pensa que você está executando um test (First [ ) em outro test (segundo [ ).

E antes de seu || , ele procurará um ] literal, não poderá encontrá-lo e reclamará sobre ele.

    
por Ravexina 09.05.2017 / 14:50