Android

Jak porovnat řetězce v bash

Como Invertir un Numero en C++ - Ejercicios Resueltos 17

Como Invertir un Numero en C++ - Ejercicios Resueltos 17

Obsah:

Anonim

Při psaní skriptů Bash budete často muset porovnat dva řetězce, abyste si ověřili, zda jsou stejné nebo ne. Dva řetězce jsou stejné, pokud mají stejnou délku a obsahují stejnou posloupnost znaků.

Tento tutoriál popisuje, jak porovnat řetězce v Bash.

Porovnání operátorů

Operátory porovnání jsou operátory, které porovnávají hodnoty a vrací pravdivé nebo nepravdivé hodnoty. Při porovnávání řetězců v Bashu můžete použít následující operátory:

  • string1 = string2 a string1 == string2 - Operátor rovnosti vrací true, pokud jsou operandy stejné.
    • Při test použijte operátor = ; then echo "Strings are equal." else echo "Strings are not equal." fi ; then echo "Strings are equal." else echo "Strings are not equal." fi

      Po spuštění skriptu vytiskne následující výstup.

      Strings are equal.

      Zde je další skript, který vezme vstup od uživatele a porovná dané řetězce. V tomto příkladu použijeme ]; then echo "Strings are equal." else echo "Strings are not equal." fi ]; then echo "Strings are equal." else echo "Strings are not equal." fi

      Spusťte skript a po zobrazení výzvy zadejte řetězce:

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

      Můžete také použít logické a && a nebo || porovnat řetězce:

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

      Not equal

      Zkontrolujte, zda řetězec obsahuje podřetězec

      Existuje několik způsobů, jak zkontrolovat, zda řetězec obsahuje podřetězec.

      Jedním přístupem je použití obklopení podřetězce hvězdičkami * což znamená, že se shodují všechny znaky.

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

      Skript bude odrážet následující:

      It's there.

      Další možností je použít operátor regex =~ jak je ukázáno níže:

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

      Období, za kterým následuje hvězdička .* Odpovídá nule nebo více výskytům libovolného znaku kromě znaku nového řádku.

      Zkontrolujte, zda je řetězec prázdný

      Poměrně často budete také muset zkontrolovat, zda je proměnná prázdný řetězec nebo ne. To lze provést pomocí operátorů -n a -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.

      Porovnání řetězců s operátorem případu

      Namísto použití testovacích operátorů můžete také porovnat řetězce pomocí příkazu case:

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

      Linuxize matched.

      Lexikografické srovnání

      Lexikografické srovnání je operace, kde jsou dva řetězce srovnávány abecedně porovnáváním znaků v řetězci postupně zleva doprava. Tento druh srovnání se používá jen zřídka.

      Následující skripty lexikograficky porovnávají dva řetězce:

      #!/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

      Skript vydá následující:

      Ubuntu is lexicographically greater than Linuxize.

      Závěr

      Porovnání řetězce je jednou z nejzákladnějších a často používaných operací v Bash skriptování. Po přečtení tohoto tutoriálu byste měli dobře rozumět tomu, jak porovnat řetězce v Bash. Můžete si také přečíst našeho průvodce o zřetězení řetězců.

      bash terminál