web-dev-qa-db-fra.com

Test d'égalité de chaîne / comparaison de chaîne dans la coquille de poisson?

Comment comparez-vous deux chaînes dans Fish (comme "abc" == "def" dans d'autres langues)?

Jusqu'à présent, j'ai utilisé une combinaison de contains (il s'avère que contains "" $a renvoie uniquement 0 si $a est la chaîne vide, bien que cela ne semble pas fonctionner pour moi dans tous les cas) et switch (avec un case "what_i_want_to_match" et un case '*'). Cependant, aucune de ces méthodes ne semble particulièrement ... correcte.

42
Leigh Brenecki
  if [ "abc" != "def" ] 
        echo "not equal"
  end
  not equal

  if [ "abc" = "def" ]
        echo "equal"
  end

  if [ "abc" = "abc" ]
        echo "equal"
  end
  equal

ou une doublure:

if [ "abc" = "abc" ]; echo "equal"; end
equal
44
Keith Flower

Le manuel de test contient des informations utiles. Il est disponible avec man test.

Operators for text strings
   o STRING1 = STRING2 returns true if the strings STRING1 and STRING2 are identical.

   o STRING1 != STRING2 returns true if the strings STRING1 and STRING2 are not
     identical.

   o -n STRING returns true if the length of STRING is non-zero.

   o -z STRING returns true if the length of STRING is zero.

Par exemple

set var foo

test "$var" = "foo" && echo equal

if test "$var" = "foo"
  echo equal
end

Vous pouvez aussi utiliser [ et ] au lieu de test.

Voici comment vérifier chaînes vides ou variables non définies, qui sont fausses chez les poissons.

set hello "world"
set empty_string ""
set undefined_var  # Expands to empty string

if [ "$hello" ]
  echo "not empty"  # <== true
else
  echo "empty"
end

if [ "$empty_string" ]
  echo "not empty"
else
  echo "empty"  # <== true
end

if [ "$undefined_var" ]
  echo "not empty"
else
  echo "empty"  # <== true
end
12
Dennis