싱글과 더블은 다르게 행동합니다

싱글과 더블은 다르게 행동합니다

이것은 더 큰 코드 조각에 포함된 간단한 코드 줄인데, 이것이 제가 혼란스러워하는 부분입니다.

if [ $some_line == "text" ]
then

그런 다음 작업 중이던 다른 프로그램에 동일한 코드를 계속 사용했지만 "=="를 "="로 변경하지 않으면 코드가 작동하지 않았습니다. 나는 여기에서 동일한 방식으로 동작한다고 제안하는 몇 가지 스레드를 살펴보았으므로 단일 또는 이중 등호를 사용하는지 여부는 중요하지 않습니다.

if [ $some_line = "text" ]
then

따라서 첫 번째 코드 조각은 "단일 동일"로 변경하지 않는 한 server1에서는 작동하지만 server2에서는 작동하지 않습니다. 두 서버의 환경은 완전히 동일합니다.

누구든지 이것을 설명할 수 있나요? 감사해요!

편집 - 매번 "bash myscript.sh"로 스크립트를 실행합니다.

답변1

==의 테스트 =와 동일합니다 .[ ]bash

==작동하지 않습니다 sh.=

두 스크립트를 모두 실행하기 위해 동일한 쉘을 사용하고 있습니까?

예:

$ cat test1
#!/bin/bash
if [ "a" == "a" ];then echo match;fi
$ ./test1
match
$ cat test2
#!/bin/bash
if [ "a" = "a" ];then echo match;fi
$ ./test2
match
$ cat test3
#!/bin/sh
if [ "a" = "a" ];then echo match;fi
$ ./test3
match
$ cat test4
#!/bin/sh
if [ "a" == "a" ];then echo match;fi
$ ./test4
./test4: 2  [: a: unexpected operator

관련 정보