Erro de código vs executivo em ==

0

Eu corri um erro estranho com o seguinte código:

#!/usr/bin/env bash

a="a"
b="a"

if [ "$a" == "$b" ]
then
  echo "Eq"
fi

chmod u+x script.sh

Em seguida, a execução do arquivo exibirá Eq :

$ ./script.sh
Eq

Mas o fornecimento resulta em um erro:

$ source script.sh
script.sh:6: = not found

Você sabe o que pode causar esse erro?

    
por nobe4 07.02.2016 / 23:51

2 respostas

3

Ao fazer o sourcing do script, seu shell atual executa os comandos. Em zsh, você deve usar um único = na comparação.

$ echo '[ a == a ]' | zsh
zsh: = not found
exit code: 1
$ echo '[ a = a ]' | zsh
$
    
por 07.02.2016 / 23:55
1

Resposta: O shell que está executando o código (originado) não é bash.

se o código apresentado estiver dentro de um arquivo chamado script.sh , os erros aparecerão:

$ dash ./script.sh
./script.sh: 6: [: a: unexpected operator
$ zsh ./script.sh
./script.sh:6: = not found

Isso parece confirmar que você está usando um prompt zsh e fornecendo o script. Para reproduzir:

$ zsh
$ . ./script.sh
./script.sh:6: = not found

Isso não acontecerá se o shell interativo for bash:

$ bash
$ . ./script.sh
Eq

Além disso, seria melhor se você usasse um shebang de #!/bin/bash (não que isso mude o que acabei de explicar, mas vale a pena mencionar).

    
por 08.02.2016 / 04:48