Wie verwende ich $IFS in Bash?

Das IFS ist eine Abkürzung für Internal Field Separator, eine Umgebungsvariable in der Shell zur Bestimmung des Trennzeichens. Das $IFS gibt an, wie die Wörter an der Eingabeaufforderung getrennt werden. Standardmäßig sind Feldtrennzeichen (IFS) Leerzeichen, Tabulator und Zeilenumbruch, aber wir können dies in unserem Skript ändern, um es an die Anforderungen anzupassen. Es wird hauptsächlich für Schleifen verwendet, um die Elemente in der angegebenen Liste zu manipulieren. Wir verwenden die Variable $IFS in unserem Bash-Skript, um die Zeichenfolge zu teilen, da Bash keinen integrierten Mechanismus zur Zeichenfolgenaufteilung enthält.

Beispiel 1: Bash-Skript ohne $IFS-Operator

Betrachten Sie das folgende Bash-Skript, bei dem die Elemente durch Leerzeichen getrennt sind. Hier verwenden wir nicht den $IFS-Operator, um die Ausgabe des normalen Bash-Skripts anzuzeigen. Wir erstellen die Datei „Bash.sh“ und öffnen sie dann, um das Programm zum Drucken der Zeichenfolge auf der Bash-Shell zu schreiben. Wir beginnen mit der Deklaration der Variablen mit dem Titel „$MySentence“ und geben diese Variable mit der langen Zeichenfolge an. Wir haben verschiedene Wörter in der Zeichenfolge, die durch das Leerzeichen getrennt sind. Dann rufen wir die foreach-Schleife auf, um jedes Wort der Zeichenfolge „$MySentence“ auszugeben. Die foreach-Schleife wird mit dem „MyWords“-Objekt gesetzt, das das iterierte Wort aus der Zeichenfolge enthält. Danach geben wir die iterierten Wörter aus der Zeichenfolge mit dem echo-Befehl zurück, der zwischen der do- und done-Anweisung eingesetzt wird.

#!/usr/bin/env bash

MySentence=“Bash ist eine effektive Programmierung“

für MyWords in $MySentence
Tun
echo „$MyWords“
Erledigt

Öffnen Sie das Terminal mit der Tastenkombination „Strg+Alt+T“ und kompilieren Sie die Datei „bash.sh“ mit dem Bash-Befehl. Die angezeigten Wörter in der Shell stehen in einer separaten Zeile, da Leerzeichen, Tabulatoren und die neue Zeile in Bash als Feldtrennzeichen gelten.

$ bash ./Bash.sh

Beispiel 2: Bash-Skript mit dem $IFS-Operator

Wir trennen die Wörter in der angegebenen Zeichenfolge, ohne den Operator $IFS zu verwenden. Wir können den Operator $IFS mit dem gewünschten Zeichen verwenden. Wenn wir das Standard-IFS ändern, ist es eine kluge Strategie, das alte in einer Variablen zu speichern. Sobald wir unsere erforderlichen Aufgaben erledigt haben, können wir den ursprünglichen Charakter IFS neu zuweisen. Nehmen wir das Bash-Skript, in dem der Operator $IFS zum Trennen der Wörter verwendet wird.

Hier geben wir die Zeichenfolge als Namen von Personen an, die durch den Doppelpunkt „:“ innerhalb der Variablen „Personen“ getrennt werden. Anschließend speichern wir den ursprünglichen IFS-Wert im Attribut „Pre_ifs“. Als nächstes deklarieren wir die IFS-Variable, wobei der Doppelpunkt „:“ als Trennzeichen gesetzt wird. Die IFS-Variable wird als Wort-Token verwendet, das für die for-Schleife verwendet wird. Wir verwenden die foreach-Schleife, um die Zeichenfolge der Variablen „Persons“ in geteilter Form zu durchlaufen und alle Zeichenfolgenelemente an das „Per“-Objekt der for-each-Schleife zu übergeben. Anschließend verwenden wir die Echo-Anweisung in den Befehlen „do“ und „done“, um die getrennten Zeichenfolgen anzuzeigen.

#/bin/bash

Personen=Alex:Thomas:Kyle:Jenny
Pre_ifs=“$IFS“
IFS=“:“
für Pro in $Personen
Tun
echo Der Name der Person ist $Per
Erledigt

Kompilieren Sie es mit der Bash-Skriptdatei im Terminal, um die Ausgabe der Verwendung des IFS-Operators zu sehen. Wenn die Bash-Datei des IFS-Operators ausgeführt wird, trennt sie jede Zeichenfolge im folgenden Format:

Beispiel 3: Bash-Skript mit dem $IFS-Operator zur Anzeige des Benutzernamens aus der Datei

Jetzt verwenden wir den $IFS-Operator im Bash-Skript, um die Namen der Benutzer aus der Datei „/etc/passwd“ anzuzeigen. Wir verwenden hier den Operator $IFS, der jeden Benutzernamen in der Shell trennt. Das folgende Bash-Skript beginnt mit der Deklaration der Variable „IFS“, die mit dem Zeichen „$’\n’“ und einem Doppelpunkt „:“ gesetzt wird. Das Zeichen $’\n‘ ist ein Zeilenumbruchzeichen, das für die Escape-Sequenz verwendet wird. Die Benutzernamen werden über das bereitgestellte IFS getrennt.

Danach haben wir eine Variable „x“, deren Wert „1“ zugewiesen ist. Dann verwenden wir einen cat-Befehl mit der Datei „/etc/passwd“, der den Benutzernamen an das „user“-Objekt der foreach-Schleife übergibt, um alle Benutzer der Datei „/etc/passwd“ zu durchlaufen. Die Befehle „do“ und „done“ werden mit den verschachtelten bedingten „if“-Anweisungen angegeben, um den Benutzern ein Echo zu geben.

IFS=$’\n‘:
x=1
für Benutzer in „cat /etc/passwd“.
Tun
Wenn [ $x -eq 1 ]

Dann
echo $user
fi
Wenn [ $x -eq 7 ]

Dann
x=1
anders
x=$((x+1))
fi
Erledigt

Wir führen das Bash-Skript auf dem folgenden Terminalbildschirm aus, der die Benutzer von „/etc/passwd“ durch ein angegebenes Feldtrennzeichen ausgibt:

Beispiel 4: Befehlszeilen-Bash-Skript mit $IFS

Das IFS ist eine spezielle Shell-Variable, sodass wir es direkt in der Befehlszeile verwenden können. Hier haben wir eine Abkürzung zur Verwendung des IFS-Operators. Anstatt eine separate Bash-Skriptdatei zu erstellen, öffnen wir das Terminal und definieren die Variable „IFS“. Die Variable „IFS“ wird mit dem Trennzeichen „-“ durch den Bindestrich festgelegt. Dann geben wir eine „Hello-Geeks“-Zeichenfolge zurück, die durch einen Feldtrennstrich „-“ getrennt ist. Anschließend definieren wir mit dem Lesebefehl die Variablen „var1“ und „var2“ und geben diese Variablen separat zurück.

IFS=“-„
echo „Hallo Geeks!“ | (var1 var2 lesen; echo $var1; echo $var2)

Die Ausgabe ruft die Zeichenfolge „Hello“ und die Zeichenfolge „Geeks“ getrennt ab. Daher akzeptiert das $IFS die Trennzeichen einzeln.

Beispiel 5: Aufteilen der benutzerdefinierten Zeichenfolge im Bash-Skript mit IFS

Wir haben den $IFS-Operator im vorherigen Bash-Skript verwendet, um die Funktionalität zu demonstrieren. Jetzt verwenden wir einen IFS-Operator, um das Trennzeichen für die Wortfolge festzulegen, die vom Benutzer im Terminal definiert wird. Wir geben einen Lesebefehl mit dem Flag „-p“. Dieser Befehl gibt die Anweisung „Geben Sie die Zeichenfolge mit Leerzeichen ein“ aus. Anschließend wird der eingegebene String in der Variablen „StringIs“ initialisiert. Der IFs-Operator wird mit dem Leerzeichen als Trennzeichen festgelegt, um die Zeichenfolgen zu unterteilen.

Als nächstes haben wir den Befehl „read -ra ADDR“, der „$StrinIS“ als ein Array von Tokens liest, die durch IFS aufgeteilt werden. Die Option „-r“ gibt an, dass der Backslash „\“ kein Escape-Zeichen, sondern ein Zeichen ist. Die Option „-a“ gibt an, dass die Wörter durch $IFS getrennt werden, das dem sequentiellen Index des Arrays zugeordnet ist, der bei Null beginnt. Danach greifen wir auf die String-Elemente des Arrays zu, indem wir es durch die foreach-Schleife durchlaufen.

#!/bin/bash

read -p „Geben Sie die Zeichenfolge mit Leerzeichen ein: “ StringIS
IFS=“
read -ra ADDR <<<"$StringIS"
für i in „${ADDR[@]}“;
Tun
echo „$i“
Erledigt

Die vom Benutzer eingegebene Zeichenfolge enthält die Leerzeichen, deren Ausführung wie folgt erfolgt:

Abschluss

In diesem Leitartikel wurde die Methode zum Trennen eines Tokens in Bash über $IFS durch Implementierung der Bash-Skripte entdeckt. Wir haben auch $IFS in der Eingabeaufforderung verwendet, um die Zeichenfolge zu teilen. Dies ist eine sehr einfache und kurze Möglichkeit, die Trennung der Saite zu bewerkstelligen. Allerdings verwendet die Shell jedes IFS-Zeichen als Trennzeichen und teilt die Ergebnisse der anderen Iterationen in Wörter auf.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen