다음 코드를 실행할 때 이상한 오류가 발생했습니다.
#!/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
(방금 설명한 내용이 바뀌는 것은 아니지만 언급할 가치가 있습니다).