Aus Linux-Magazin 02/2013

Auf den Punkt gebracht

Haben Sie Anregungen, Statements oder Kommentare? Dann schreiben Sie an redaktion@linux-magazin.de. Die Redaktion behält es sich vor, die Zuschriften und Leserbriefe zu kürzen. Sie veröffentlicht alle Beiträge mit Namen, sofern der Autor nicht ausdrücklich Anonymität wünscht.

Shell-Bordmittel

12/12, S. 92: Ich habe eine Anmerkung zum Artikel Bash Bashing. Der Text und das Shellskript suggerieren, dass es nicht möglich sei, den Bash-Einzeiler »LIST=${PATH//:/ }« mit Dash-Bordmitteln nachzubilden. Das abgedruckte Awk-Skript lässt sich jedoch auch ohne irgendein externes Kommando folgendermaßen nachbilden:

LIST=$(IFS=:; for p in $PATH; do echo "$p";done)

Möchte man Leerzeichen statt Linefeeds zwischen dem Elementen (wie bei »${PATH//:/ }« ), dann geht es sogar noch einfacher:

LIST=$(IFS=:; echo $PATH)

Zugegeben, in exotischen Fällen gäbe es hier tatsächlich das übliche Shell-Problem: Steht nach Expansion der Variablen am Anfang eine Option, die der Echo-Befehl auswertet, funktioniert es nicht mehr.

Ein Testskript habe ich mitgeschickt (Listing 1), es funktioniert mindestens mit Ash, Bash, Dash, Mksh, Posh und Sash. Ersetzt man »$(…)« durch den klassischen Backtick »`…`« , dann sollte das sogar unter historischen Bourne Shells laufen.

Listing 1

$PATH aufspalten

01 LIST=$(awk '
02   BEGIN {
03     split(ENVIRON["PATH"], p, ":")
04     for (i=1; i<=length(p); i++)
05       print p[i]
06   }
07 ')
08
09 LIST2=$(IFS=:; for p in $PATH; do echo "$p"; done)
10 test "$LIST" = "$LIST2" || echo "Fehler 1"
11
12 LIST=$(/bin/bash -c 'echo "${PATH//:/ }"')
13 LIST2=$(IFS=:; echo $PATH)
14 test "$LIST" = "$LIST2" || echo "Fehler 2"

Christian Franke, per E-Mail

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 1 HeftseitePreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben