¿Cómo comparo dos variables de cadena en una declaración 'si' en Bash? [duplicar]

Resuelto Mr Shoubs asked hace 14 años • 12 respuestas

Estoy intentando que una ifdeclaración funcione en Bash (usando Ubuntu ):

#!/bin/bash

s1="hi"
s2="hi"

if ["$s1" == "$s2"]
then
  echo match
fi

Probé varias formas de declaración if, usando [["$s1" == "$s2"]], con y sin comillas, usando =y , pero sigo recibiendo el siguiente error:==-eq

[hola: comando no encontrado

Miré varios sitios y tutoriales y los copié, pero no funciona. ¿Qué estoy haciendo mal?

Finalmente, quiero decir si $s1contiene $s2, entonces, ¿cómo puedo hacerlo?

Acabo de calcular los espacios... :/ ¿Cómo digo que contiene ?

Lo intenté

if [[ "$s1" == "*$s2*" ]]

pero no funcionó.

Mr Shoubs avatar Nov 25 '10 20:11 Mr Shoubs
Aceptado

Para comparar la igualdad de cadenas, utilice:

if [[ "$s1" == "$s2" ]]

Para que la cadena NO sea igual a la comparación, use:

if [[ "$s1" != "$s2" ]]

Para los acontenidos b, utilice:

if [[ $s1 == *"$s2"* ]]

(y asegúrese de agregar espacios entre los símbolos):

Malo:

if [["$s1" == "$s2"]]

Bien:

if [[ "$s1" == "$s2" ]]
moinudin avatar Nov 25 '2010 13:11 moinudin

Debes tener cuidado de dejar un espacio entre el signo de '[' y las comillas dobles donde la variable contiene esto:

if [ "$s1" == "$s2" ]; then
#   ^     ^  ^     ^
   echo match
fi

Las ^s muestran los espacios en blanco que debes dejar.

trejo08 avatar Jan 29 '2013 15:01 trejo08

Necesitas espacios:

if [ "$s1" == "$s2" ]
unwind avatar Nov 25 '2010 13:11 unwind

Te sugiero este:

if [ "$a" = "$b" ]

Observe el espacio en blanco entre los corchetes de apertura/cierre y las variables y también los espacios en blanco que envuelven el signo '=".

Además, tenga cuidado con el encabezado de su script. No es lo mismo si usas

#!/bin/bash

o

#!/bin/sh

Aquí está la fuente .

Abderrazak BOUADMA avatar Nov 27 '2014 14:11 Abderrazak BOUADMA