소스 오류가 있는 == 실행

소스 오류가 있는 == 실행

다음 코드를 실행할 때 이상한 오류가 발생했습니다.

#!/usr/bin/env bash

a="a"
b="a"

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

chmod u+x script.sh

그런 다음 파일을 실행하면 다음이 표시됩니다 Eq.

$ ./script.sh
Eq

그러나 이를 소싱하면 오류가 발생합니다.

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

이 오류의 원인이 무엇인지 아시나요?

답변1

스크립트가 실행되면 현재 쉘이 명령을 실행합니다. zsh에서는 =비교하려면 단일 명령을 사용해야 합니다 .

$ echo '[ a == a ]' | zsh
zsh: = not found
exit code: 1
$ echo '[ a = a ]' | zsh
$

답변2

답변: (소스) 코드를 실행하는 쉘은 bash가 아닙니다.

제공한 코드가 라는 파일 내에 있으면 script.sh다음 오류가 발생합니다.

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

이것은 zsh 프롬프트를 사용하고 스크립트를 받고 있음을 확인하는 것 같습니다. 재현하려면:

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

대화형 쉘이 bash인 경우에는 이런 일이 발생하지 않습니다.

$ bash
$ . ./script.sh
Eq

또한, shebang을 사용하면 더 좋을 것입니다 #!/bin/bash(방금 설명한 내용이 바뀌는 것은 아니지만 언급할 가치가 있습니다).

관련 정보