String in Array aufteilen in Bash

Fumbani Banda 19 Januar 2022
  1. Verwenden des Befehls read zum Aufteilen eines Strings in ein Array in Bash
  2. Verwenden des Befehls tr zum Aufteilen eines Strings in ein Array in Bash
  3. Verwenden der Parametererweiterung zum Aufteilen eines Strings in ein Array in Bash
String in Array aufteilen 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
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub

Verwandter Artikel - Bash String

Verwandter Artikel - Bash Array