Używanie zmiennej $IFS
Specjalna zmienna powłoki $IFS jest używana w bash do dzielenia łańcucha na słowa. Zmienna $IFS nosi nazwę wewnętrznego separatora pól (IFS), która jest używana do przypisania określonego separatora do dzielenia łańcucha. Granice słów są identyfikowane w bash przez $IFS. Spacja jest domyślną wartością ogranicznika dla tej zmiennej. Dowolna inna wartość, taka jak „ ”, „ ”, „-” itp. Można użyć jako ogranicznika. Po przypisaniu wartości do zmiennej $IFS, wartość ciągu można odczytać dwoma opcjami. Są to „-r” i „-a”. Opcja „-r” służy do odczytywania odwrotnego ukośnika () jako znaku zamiast znaku ucieczki, a opcja „-a” służy do przechowywania podzielonych słów w zmiennej tablicowej. Ciąg można podzielić bez użycia zmiennej $IFS w bash. W poniższych przykładach przedstawiono różne sposoby dzielenia danych ciągu (z $IFS lub bez $IFS).
Przykład-1: Podziel ciąg na podstawie
Wartość ciągu jest domyślnie dzielona przez białe znaki. Utwórz plik o nazwie „split1.sh” i dodaj następujący kod. Tutaj zmienna $text jest używana do przypisania wartości ciągu. Zmienna powłoki, $IFS, służy do przypisania znaku, który będzie używany do dzielenia danych ciągu. Spacja jest używana w tym skrypcie jako separator. Opcja „-a” jest używana z poleceniem czytania do przechowywania podzielonych danych w zmiennej tablicowej o nazwie $strarr. Pętla „for” służy do odczytywania każdego elementu tablicy, $strarr.
split1.sh
#!/kosz/bash
#Zdefiniuj wartość ciągu
tekst='Witamy w LinuxHint'
# Ustaw spację jako ogranicznik
IFS=''
#Odczytaj podzielone słowa w tablicę opartą na ograniczniku spacji
czytać -dostrarr<<< '$tekst'
#Policz wszystkie słowa
wyrzucił 'Są${#strarr[*]}słowa w tekście”.
# Wydrukuj każdą wartość tablicy za pomocą pętli
dlagodzinaw '${strarr[@]}';
robić
printf '$ godzin '
Gotowe
Wyjście:
Uruchom skrypt.
$grzmotnąćsplit1.sh
Poniższe dane wyjściowe pojawią się po uruchomieniu skryptu.
Przykład-2: Podziel ciąg na podstawie określonego znaku
Jako separatora do dzielenia wartości ciągu można użyć dowolnego określonego znaku. Utwórz plik o nazwie split2.sh i dodaj następujący kod. Tutaj nazwa książki, nazwisko autora i wartość ceny są pobierane przez dodanie przecinka (,) jako ciągu wejściowego. Następnie wartość ciągu jest dzielona i przechowywana w tablicy opartej na wartości zmiennej powłoki $IFS. Każda wartość elementów tablicy jest wypisywana przez wartość indeksu.
split2.sh
#!/kosz/bash#Odczytaj wartość ciągu
wyrzucił 'Wpisz nazwę książki, nazwisko autora i cenę, oddzielając przecinek. '
czytaćtekst
# Ustaw przecinek jako ogranicznik
IFS=','
#Odczytaj podzielone słowa do tablicy opartej na przecinku
czytać -dostrarr<<< '$tekst'
#Wydrukuj podzielone słowa
wyrzucił 'Nazwa księgi:${strarr[0] }'
wyrzucił 'Imię autora :${strarr[1]}'
wyrzucił 'Cena :${strarr[2]}'
Wyjście:
Uruchom skrypt.
$grzmotnąćsplit2.shPoniższe dane wyjściowe pojawią się po uruchomieniu skryptu.
Przykład-3: Podziel ciąg bez zmiennej $IFS
Ten przykład pokazuje, jak można podzielić wartość ciągu bez użycia $IFS w bash. Utwórz plik o nazwie „ split3.sh ” i dodaj następujący kod. Zgodnie ze skryptem wartość tekstowa z dwukropkiem (:) musi brać jako dane wejściowe do podziału. Tutaj polecenie „readarray” z opcją -d służy do dzielenia danych ciągu. Opcja „-d” służy do zdefiniowania znaku separatora w poleceniu, takim jak $ IFS. Następnie pętla „for” służy do drukowania elementów tablicy.
split3.sh
#!/kosz/bash#Przeczytaj główny ciąg
wyrzucił 'Wprowadź ciąg z dwukropkiem(:) do podziału'
czytaćgłówny
#Podziel ciąg na podstawie ogranicznika „:”
czytaj tablicę-D:-Tstrarr<<< '$mainstr'
printf ' '
# Wydrukuj każdą wartość tablicy za pomocą pętli
dla (( n=0; n< ${#strarr[*]}; n++))
robić
wyrzucił '${strarr[n]}'
Gotowe
Wyjście:
Uruchom skrypt.
$grzmotnąćsplit3.shPoniższe dane wyjściowe pojawią się po uruchomieniu skryptu.
Przykład 4: Podziel ciąg za pomocą wieloznakowego ogranicznika
We wszystkich poprzednich przykładach wartość ciągu jest podzielona przez ogranicznik pojedynczego znaku. W tym przykładzie pokazano, jak podzielić ciąg za pomocą wieloznakowego ogranicznika. Utwórz plik o nazwie Czasy split4.sh i dodaj następujący kod. Tutaj zmienna $text służy do przechowywania danych ciągu. Zmienna $delimiter służy do przypisywania danych wieloznakowych, które są używane jako ogranicznik w następnych instrukcjach. Zmienna $myarray służy do przechowywania podzielonych danych jako elementu tablicy. Na koniec wszystkie podzielone dane są drukowane za pomocą pętli „for”.
split4.sh
#!/kosz/bash#Zdefiniuj ciąg do podziału
tekst=„learnHTMLlearnPHPlearnMySQLlearnJavascript”
#Zdefiniuj wieloznakowy ogranicznik
ogranicznik='uczyć się'
#Połącz ogranicznik z głównym ciągiem
strunowy=$tekst$ogranicznik
#Podziel tekst na podstawie ogranicznika
myarray=()
podczas [[ $string ]];robić
myarray+=( '${string%%'$delimiter'*}' )
strunowy=${string#*'$delimiter'}
Gotowe
#Wydrukuj słowa po podziale
dlawartośćw ${myarray[@]}
robić
wyrzucił -n '$wartość'
Gotowe
printf ' '
Wyjście:
Uruchom skrypt.
$grzmotnąćsplit4.shPoniższe dane wyjściowe pojawią się po uruchomieniu skryptu.
Wniosek:
Dane ciągu muszą zostać podzielone dla różnych celów programistycznych. W tym samouczku przedstawiono różne sposoby dzielenia danych ciągu w bash. Mam nadzieję, że po przećwiczeniu powyższych przykładów czytelnicy będą mogli podzielić dowolne dane łańcuchowe na podstawie ich wymagań.
Aby uzyskać więcej informacji, obejrzyj wideo !