
Hier ist eine einfache Zeile aus einem größeren Codeteil, die mich verwirrt.
if [ $some_line == "text" ]
then
Dann habe ich denselben Code für ein anderes Programm verwendet, an dem ich gerade arbeitete, aber der Code funktionierte nicht, AUSSER ich habe "==" in "=" geändert. Ich habe hier einige Threads durchgesehen, die nahelegen, dass beide gleich funktionieren, es also keine Rolle spielt, ob Sie einfache oder doppelte Gleichheitszeichen verwenden.
if [ $some_line = "text" ]
then
Der erste Code funktioniert also auf Server1, aber nicht auf Server2, AUSSER ich ändere ihn in „single equals“. Beide Server haben genau dieselbe Umgebung.
Kann das jemand erklären? Danke!
BEARBEITEN – Ich führe das Skript jedes Mal als „bash myscript.sh“ aus.
Antwort1
==
und sind innerhalb von Tests in =
gleichwertig .[ ]
bash
==
funktioniert nicht in sh
, nur=
Führen Sie beide Skripte mit derselben Shell aus?
Beispiel:
$ 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