single и double равно оба ведут себя по-разному

single и double равно оба ведут себя по-разному

Вот простая строка из большого фрагмента кода, которая меня сбивает с толку.

if [ $some_line == "text" ]
then

Затем я продолжил использовать тот же код для другой программы, над которой работал, но код не работал, ПОКА я не изменил "==" на "=". Я просмотрел несколько тем здесь, которые предполагают, что оба они действуют одинаково, поэтому не имеет значения, используете ли вы одинарные или двойные знаки равенства.

if [ $some_line = "text" ]
then

Итак, первый фрагмент кода работает на сервере server1, но не на сервере server2, ЕСЛИ я не изменю его на "single equals". Оба сервера имеют совершенно одинаковую среду.

Кто-нибудь может объяснить? Спасибо!

EDIT - Я каждый раз запускаю скрипт как «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

Связанный контент