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
$
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?
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).
Tags bash shell-script