Single und Double sind gleichbedeutend mit unterschiedlichem Verhalten

Single und Double sind gleichbedeutend mit unterschiedlichem Verhalten

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

verwandte Informationen