Android

Jak porównać ciągi w bash

Terminal vs. Bash vs. Command line vs. Prompt

Terminal vs. Bash vs. Command line vs. Prompt

Spisu treści:

Anonim

Podczas pisania skryptów Bash często będziesz musiał porównać dwa ciągi, aby sprawdzić, czy są one równe, czy nie. Dwa ciągi znaków są równe, jeśli mają tę samą długość i zawierają tę samą sekwencję znaków.

W tym samouczku opisano, jak porównać ciągi w Bash.

Operatory porównania

Operatory porównania to operatory, które porównują wartości i zwracają wartość prawda lub fałsz. Porównując ciągi w Bash, możesz użyć następujących operatorów:

  • string1 = string2 i string1 == string2 - Operator równości zwraca wartość true, jeśli argumenty są równe.
    • Użyj operatora = z test ; then echo "Strings are equal." else echo "Strings are not equal." fi ; then echo "Strings are equal." else echo "Strings are not equal." fi

      Kiedy skrypt zostanie wykonany, wydrukuje następujące dane wyjściowe.

      Strings are equal.

      Oto kolejny skrypt, który pobiera dane wejściowe od użytkownika i porównuje podane ciągi. W tym przykładzie użyjemy ]; then echo "Strings are equal." else echo "Strings are not equal." fi ]; then echo "Strings are equal." else echo "Strings are not equal." fi

      Uruchom skrypt i wprowadź ciągi znaków, gdy pojawi się monit:

      Enter first string: Linuxize Enter second string: Ubuntu Strings are not equal.

      Możesz także użyć logicznego i && i lub || porównać ciągi znaków:

      ] && echo "Equal" || echo "Not equal"

      Not equal

      Sprawdź, czy ciąg zawiera podciąg

      Istnieje wiele sposobów sprawdzenia, czy ciąg zawiera podciąg.

      Jednym z podejść jest użycie otaczania podciągów symbolami gwiazdki * co oznacza dopasowanie wszystkich znaków.

      #!/bin/bash VAR='GNU/Linux is an operating system' if]; then echo "It's there." fi

      Skrypt wyświetli następujące echo:

      It's there.

      Inną opcją jest użycie operatora wyrażenia regularnego =~ jak pokazano poniżej:

      #!/bin/bash VAR='GNU/Linux is an operating system' if]; then echo "It's there." fi

      Kropka, po której następuje gwiazdka .* Odpowiada zeru lub większej liczbie wystąpień dowolnego znaku oprócz znaku nowej linii.

      Sprawdź, czy ciąg znaków jest pusty

      Dość często trzeba będzie również sprawdzić, czy zmienna jest pustym łańcuchem, czy nie. Możesz to zrobić za pomocą operatorów -n i -z .

      #!/bin/bash VAR='' if]; then echo "String is empty." fi

      String is empty.

      #!/bin/bash VAR='Linuxize' if]; then echo "String is not empty." fi

      String is not empty.

      Porównywanie ciągów z operatorem sprawy

      Zamiast używać operatorów testowych, możesz również użyć instrukcji case do porównania ciągów:

      #!/bin/bash VAR="Arch Linux" case $VAR in "Arch Linux") echo -n "Linuxize matched";; Fedora | CentOS) echo -n "Red Hat";; esac

      Linuxize matched.

      Porównanie leksykograficzne

      Porównanie leksykograficzne to operacja polegająca na porównywaniu dwóch ciągów alfabetycznych poprzez porównywanie znaków w ciągu kolejno od lewej do prawej. Tego rodzaju porównanie jest rzadko używane.

      Poniższe skrypty porównują dwa ciągi leksykograficzne:

      #!/bin/bash VAR1="Linuxize" VAR2="Ubuntu" if]; then echo "${VAR1} is lexicographically greater then ${VAR2}." elif]; then echo "${VAR2} is lexicographically greater than ${VAR1}." else echo "Strings are equal" fi

      Skrypt wyświetli następujące informacje:

      Ubuntu is lexicographically greater than Linuxize.

      Wniosek

      Porównywanie łańcucha jest jedną z najbardziej podstawowych i często używanych operacji w skryptach Bash. Po przeczytaniu tego samouczka powinieneś dobrze zrozumieć, jak porównywać ciągi w Bash. Możesz także sprawdzić nasz przewodnik na temat łączenia łańcuchów.

      terminal bash