-eq: operador unário esperado, análise do argumento do shell

1

Estou recebendo este erro ao comparar o argumento shell a uma string. Se o código se parece com isso:

online=true
if [ "$2" -eq '-o' ]
then
    online=false
fi
echo $online

Então, por exemplo, entrada estou recebendo os resultados:

$ ./currency.sh 2 -o
./currency.sh: line 13: [: -o: integer expression expected
true
    
por siery 21.03.2018 / 02:53

1 resposta

4

Nesta linha:

if [ "$2" -eq '-o' ]

Você usou o operador aritmético -eq , que considera o segundo argumento como um número.

Naturalmente, falha apenas por esse motivo.

Ao comparar strings, você pode usar o POSIX = operator:

if [ "$2" = '-o' ]

Note que esta versão deve funcionar em todos os shells, como é definido por POSIX (Interface do Sistema Operacional Portátil) .

Se você quiser Bash - versão específica:

if [[ "$2" == '-o' ]]

Note que esta versão funcionará apenas em Bash (shell Bourne-again) e similares.

Por outro lado, os colchetes duplos [[ .. ]] e == do operador são definidos em Bash somente e não funcionará em outros shells.

    
por 21.03.2018 / 06:05

Tags