Programowanie BASH

Jak używać $IFS w Bash?

Jak używać $IFS w Bash?
W skrypcie musimy z różnych powodów łamać dane ciągów. Split to zintegrowana funkcja w wielu językach komputerowych, która dzieli każdy ciąg danych na różne części. Jednak bash nie ma wbudowanej funkcji dzielenia struny. Aby złamać dowolną wartość ciągu, można użyć wielu pojedynczych i złożonych ograniczników. Zmienna IFS (Internal Field Separator) jest używana do określenia konkretnego separatora dla dzielenia ciągów. W tym przewodniku dowiesz się, jak korzystać z różnych metod, aby zilustrować proces łamania wartości ciągu w bash za pomocą $IFS.

Warunki wstępne

Upewnij się, że masz zainstalowany i skonfigurowany system oparty na Linuksie. Będziemy pracować nad Ubuntu 20.04 System Linux. Zaloguj się z konta użytkownika Ubuntu, aby rozpocząć pracę w systemie IFS. Będzie lepiej, jeśli zalogujesz się z konta użytkownika root. Po zalogowaniu uruchom terminal wiersza poleceń w swoim systemie z obszaru Aktywność.

Przykład 01: IFS dzieli ciąg znaków używając spacji jako wartości

W naszym pierwszym przykładzie zrozumiemy koncepcję dzielenia ciągu w bash przy użyciu spacji jako wartości ogranicznika za pomocą zmiennej IFS. Najpierw musimy stworzyć plik bash w naszym systemie. Możemy tworzyć nowe pliki w naszym systemie Linux za pomocą polecenia „dotknij”. Jak pokazano poniżej, utworzyliśmy plik bash 'plik1.sh” za pomocą instrukcji „touch”:

$ dotknij plik1.cii

Otwórz katalog domowy systemu Linux za pomocą ikony folderu wyświetlanej w lewym rogu systemu Ubuntu 20.04 pulpit. Znajdziesz nowo utworzony plik bash „plik1.sh” w tym. Otwórz plik „plik1.sh” i wpisz poniższy skrypt. Najpierw zdefiniowaliśmy ciąg o nazwie „str” z pewną wartością ciągu. Następnie definiujemy zmienną ogranicznika IFS jako zmienną, której wartością jest spacja. Następnie użyliśmy instrukcji read, aby zapisać i odczytać podzielone dane do tablicy „strarr” za pomocą flagi „-a”. Instrukcja „echo” służy do drukowania wiersza ciągu wraz z liczbą wszystkich słów tablicy za pomocą „$#strarr[*]”. Pętla „for” służy do drukowania wartości tablicy w formie podzielonej za pomocą zmiennej „var”. Odwrotny ukośnik „\n” został użyty w wierszu wydruku wraz ze zmienną „var”, aby dać podział jednego wiersza po każdej wartości tablicy. Zapisz skrypt za pomocą klawisza „Ctrl+S” i zamknij plik, aby przejść dalej.

Wróć na stronę terminala. Teraz sprawdzimy wynik powyższego kodu. W tym celu użyjemy polecenia „bash” wraz z nazwą pliku „plik1.sh”, aby wykonać to, co pokazano poniżej. Najpierw wyświetlał linię wspomnianą w wyrażeniu „echo” wraz z liczbą słów tablicy. Następnie wyświetlał wszystkie wartości tablicy za pomocą pętli „for” podzielonej przez IFS.

$bash plik1.cii

Przykład 02: IFS dzieli ciąg znaków, używając znaku jako wartości

W powyższym przykładzie widziałeś, jak podzielić zmienne łańcuchowe na części, używając spacji jako separatora IFS. Teraz użyjemy znaku, aby podzielić łańcuch za pomocą ogranicznika IFS. Otwórz terminal poleceń i utwórz nowy plik bash „file2.sh” w katalogu domowym systemu Linux za pomocą polecenia „touch” w następujący sposób:

$ dotknij plik2.cii

Otwórz katalog domowy swojego systemu Linux. Znajdziesz w nim swój nowo utworzony plik. Otwórz nowo utworzony plik i napisz poniższy kod bash. W wierszu 3 zainicjowaliśmy instrukcję „echo”, aby wydrukować wiersz. Następna linia odczytuje dane wejściowe podane przez użytkownika w terminalu za pomocą słowa kluczowego ”read”. Następnie zdefiniowaliśmy separator „IFS” i ustawiliśmy przecinek „” jako jego wartość znakową. Określono inną instrukcję „read” do odczytywania i zapisywania wartości rozdzielonych przecinkami ciągu, który jest wprowadzany przez użytkownika do tablicy „strarr”. W końcu zainicjowaliśmy trzy instrukcje echo, aby wydrukować wartości podziału oddzielone przecinkami jako zmienne, jak pokazano na obrazku. Zapisz i zamknij ten plik.

Teraz musimy wykonać ten zapisany plik. Wykonaj poniższe polecenie bash, a następnie nazwę pliku w terminalu, aby to zrobić. Musisz dodać wartość ciągu, która musi zawierać przecinek „”, w wartościach i nacisnąć przycisk Enter. Teraz Twoje dane zostały zapisane w tablicy „strarr”. Ostatnie trzy wiersze pokazują dane wyjściowe stwierdzeń „echa”. Jak widać, każdy tekst przed i po przecinku został użyty jako osobna wartość.

$bash plik2.cii

Przykład 03: ciąg podziału IFS

Oba poprzednie przykłady zrobiliśmy w pliku bash. Zobaczymy teraz ilustrację używania „IFS” bez tworzenia pliku bash. Aby to zrobić, otwórz powłokę poleceń. Najpierw musimy utworzyć ciąg „var” zawierający w nim wartość ciągu. Ten ciąg zawiera przecinki po każdym słowie.

$ var=”Cześć, mam 25 lat, mam lat”.”

Następnie zainicjuj zmienną „IFS” z przecinkiem jako wartością ogranicznika.

$ IFS=,

Następnie użyliśmy pętli „for”, aby wyszukać każde słowo ze zmiennej „var” oddzielone przecinkiem ogranicznika IFS i wydrukować je za pomocą instrukcji „echo”.

$ za ja w $var
>do
>echo [$i]
>Gotowe

Otrzymasz wynik poniżej. Pokaże każde słowo zmiennej łańcuchowej „var” w nowym wierszu z powodu przecinka ogranicznika „”, używanego jako znak podziału.

Wniosek:

W tym przewodniku poznałeś różne metody dzielenia wartości wejściowych w bash, e.sol., ze spacją lub ze znakiem. Mamy nadzieję, że ilustracje wymienione w tym przewodniku pomogą Ci złamać każdy ciąg znaków za pomocą ogranicznika IFS.

Gry Jak wyświetlić nakładkę OSD w pełnoekranowych aplikacjach i grach dla systemu Linux?
Jak wyświetlić nakładkę OSD w pełnoekranowych aplikacjach i grach dla systemu Linux?
Granie w gry pełnoekranowe lub korzystanie z aplikacji w trybie pełnoekranowym bez rozpraszania uwagi może odciąć Cię od istotnych informacji systemow...
Gry 5 najlepszych kart do przechwytywania gier
5 najlepszych kart do przechwytywania gier
Wszyscy widzieliśmy i uwielbialiśmy strumieniowe rozgrywki na YouTube on. PewDiePie, Jakesepticye i Markiplier to tylko niektórzy z najlepszych graczy...
Gry Jak stworzyć grę na Linuksie
Jak stworzyć grę na Linuksie
Dziesięć lat temu niewielu użytkowników Linuksa przewidywało, że ich ulubiony system operacyjny pewnego dnia stanie się popularną platformą do gier dl...