
Вот простая строка из большого фрагмента кода, которая меня сбивает с толку.
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