String in Array aufteilen in Bash
-
Verwenden des Befehls
read
zum Aufteilen eines Strings in ein Array in Bash -
Verwenden des Befehls
tr
zum Aufteilen eines Strings in ein Array in Bash - Verwenden der Parametererweiterung zum Aufteilen eines Strings in ein Array in Bash
Dieses Tutorial erklärt das Aufteilen eines Strings in ein Array in der Bash mit dem Befehl read
, dem Befehl tr
und der Parametererweiterung.
Verwenden des Befehls read
zum Aufteilen eines Strings in ein Array in Bash
Der Befehl read
ist ein eingebauter Befehl auf Linux-Systemen.
Es wird verwendet, um den Inhalt einer Zeile in eine Variable einzulesen. Es teilt auch Wörter einer Zeichenkette, die einer Shell-Variablen zugewiesen ist.
Im folgenden Skript wird die Variable $addrs
-String an den read
-Befehl übergeben. Das IFS
setzt das Trennzeichen, das als Wortgrenze für die String-Variable dient.
Das bedeutet, dass das -
in unserem Fall die Wortgrenze ist. Die Option -a
weist den Befehl read
an, die Wörter, die in ein Array aufgeteilt wurden, zu speichern, während die Option -r
den Befehl read
anweist, alle Escape-Zeichen so zu behandeln, wie sie sind, und sie nicht zu interpretieren.
Die aufgespaltenen Wörter werden in der Variablen ip_array
gespeichert. Um auf die einzelnen Elemente innerhalb des Arrays zuzugreifen, verwenden wir diese Syntax, ${array name[index]}
.
Im Skript unten ist ip_array
der Array-Name und 0
ist der Index, der das erste Element im Array bezeichnet.
#!/usr/bin/env bash
addrs="192.168.8.1,192.168.8.2,192.168.8.3,192.168.8.4"
IFS=',' read -ra ip_array <<< "$addrs"
printf "${ip_array[0]}\n"
Die Ausgabe zeigt das erste Element im Array an.
192.168.8.1
Das folgende Skript fügt eine for
-Schleife hinzu, die durch das Array iteriert und alle Elemente mit dem echo
-Befehl ausgibt.
#!/usr/bin/env bash
addrs="192.168.8.1,192.168.8.2,192.168.8.3,192.168.8.4"
IFS=',' read -r -a ip_array <<< "$addrs"
for ip in "${ip_array[@]}"
do
echo "$ip"
done
Die folgende Ausgabe zeigt alle Elemente an, die sich innerhalb des Arrays befinden.
192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4
Verwenden des Befehls tr
zum Aufteilen eines Strings in ein Array in Bash
Der Befehl tr
ist eine Kurzform für translate
.
Es übersetzt, löscht und quetscht Zeichen aus der Standardeingabe und schreibt die Ergebnisse in die Standardausgabe. Es ist ein nützlicher Befehl zum Bearbeiten von Text in der Befehlszeile oder in einem Bash-Skript.
Es kann verwendet werden, um wiederholte Zeichen zu entfernen, Kleinbuchstaben in Großbuchstaben umzuwandeln und Zeichen zu ersetzen.
Im Bash-Skript unten leitet der Befehl echo
die String-Variable $addrs
an den Befehl tr
weiter, der die String-Variable auf ein Trennzeichen ;
aufteilt. Nachdem der String geteilt wurde, werden die Werte dem Array ip_addrs
zugewiesen.
Die for
-Schleife durchläuft das Array $ip_addrs
und gibt alle Werte mit dem Befehl printf
aus.
#!/bin/bash
addrs="192.168.8.1,192.168.8.2,192.168.8.3,192.168.8.4"
ip_addrs=(`echo $addrs | tr ',' ' '`)
for ip in "${ip_addrs[@]}"
do
printf "$ip\n"
done
Die folgende Ausgabe zeigt alle Elemente an, die sich innerhalb des Arrays befinden.
192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4
Verwenden der Parametererweiterung zum Aufteilen eines Strings in ein Array in Bash
Das folgende Skript verwendet die Parametererweiterung, um Zeichen zu suchen und zu ersetzen.
Die Syntax für die Parametererweiterung ist ${variable//search/replace}
. Es sucht nach einem Muster, das mit search
in der variable
übereinstimmt und ersetzt es durch replace
.
In unserem Fall sucht das Skript nach dem Muster ,
und ersetzt es durch ein Leerzeichen in der String-Variablen $addrs
. Die Klammern um ${addrs//-/ }
werden verwendet, um ein Array des neuen Strings namens ip_array
zu definieren.
Mit der for
-Schleife iterieren wir über alle Elemente des ip_array
und zeigen sie mit dem echo
-Befehl an.
#!/bin/bash
addrs="192.168.8.1,192.168.8.2,192.168.8.3,192.168.8.4"
set -f
ip_array=(${addrs//,/ })
for ip in "${!ip_array[@]}"
do
echo "[$ip] ${ip_array[ip]}"
done
Die folgende Ausgabe zeigt alle Elemente an, die sich innerhalb des Arrays befinden.
[0] 192.168.8.1
[1] 192.168.8.2
[2] 192.168.8.3
[3] 192.168.8.4
Verwandter Artikel - Bash String
- Bash Zeilenumbruch aus Zeichenfolge entfernen
- Entfernen Sie das erste Zeichen aus der Zeichenfolge in Bash
- Ersetzen Sie Zeichen in einer Zeichenfolge mit Bash
- Holen Sie sich die Länge der Zeichenfolge in Bash
- Konvertieren Sie String in Integer in Bash
- String in Variablen in Bash aufteilen