bash: teste: no: expressão inteira esperada [duplicada]

1

Eu acredito que esta linha

if test "$suman_inspect" -eq "yes"; then

está causando esse erro (textualmente):

bash: test: no: integer expression expected

Eu formulei a expressão test acima porque vi este exemplo on-line:

 if test "$#" -eq "0"; then

em que este teste verifica se o comprimento da matriz de argumentos é 0.

Então, há algo errado com essas duas verificações? Não tenho certeza se entendi como o primeiro pode ser válido, mas o segundo é inválido.

    
por Alexander Mills 10.11.2017 / 01:44

1 resposta

3

Observe que -eq é para comparações de números inteiros. Para comparações de strings, use == (ou = ) . Assim, você deve usar o seguinte:

if test "$suman_inspect" == "yes"; then
    # do something
fi

A mesma distinção se aplica a operadores de desigualdade ( -gt , -lt , -ge , -le e -ne sendo usados para comparações numéricas e > , < , >= , <= e != sendo usados para comparações de strings).

Observe que você também pode usar [ expression ] no lugar de test expression ; os dois são sinônimos .

    
por 10.11.2017 / 01:52