Login
Newsletter
Werbung

Thema: Shellskripte mit Aha-Effekt: Bash-Arrays

4 Kommentar(e) || Alle anzeigen ||  RSS || Kommentieren
Kommentare von Lesern spiegeln nicht unbedingt die Meinung der Redaktion wider.
0
Von Rudi123 am Do, 7. Dezember 2017 um 19:33 #

Ich hoffe ich schreibe hier jetzt nichts was ohnehin schon im Artikel steht, beim überfliegen ist es mir aber zumindest nicht aufgefallen:

Die mMn wichtigste Praxisanwendung von Bash-Arrays ist die als Argumentenliste. Es kommt in der Praxis häufig vor, dass die einem Befehl zu übergebenden Argumente und Optionen von bestimmten, teilweise recht komplexen Bedingungen abhängen. Das lässt sich, je nach Anwendungsfall, manchmal nur mit viel Aufwand abbilden wenn die Lösung auch wirklich sicher sein soll. Ich habe schon häufig gesehen, dass dann eval verwendet wird - was richtig böse enden kann...

Bash-Arrays sind da eine einfache und absolut sichere Variante:

CMD=( "printf" '%s\n' "foo" )
CMD+=( "foo bar" )
"${CMD[@]}"

0
Von bashisms :D am Fr, 8. Dezember 2017 um 19:45 #

Weil es im Artikel nicht angemerkt wird bitte bei so was immer daran denken den Shebang auf /bin/bash zu setzen.

POSIX shell (/bin/sh)
http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html

Bashism detector ;)
https://manpages.debian.org/testing/devscripts/checkbashisms.1.en.html

0
Von Nemo am Mo, 11. Dezember 2017 um 23:27 #

Der Grund für das nicht gelöschte Array Element auf Seite 2 dieses Artikels:

array=(Merkur Venus Erde Mars Jupiter Saturn Uranus Neptun)

INDEX=4

echo {#array[@]}
8
echo ${array[$INDEX]}
Jupiter

unset ${array[$INDEX]}

echo ${#array[@]}
8
# Oha! Das sollte aber nun 7 sein, weil Jupiter ja geloescht wurde. Mal sehen:

echo ${array[$INDEX]}
Jupiter
# Ooops! Den gibt es ja immer noch!

ist die Anweisung:

unset ${array[$INDEX]}

da sie vor ihrer Ausführung von der Bash interpoliert wird und dann wie folgt aussieht:

unset Jupiter

Richtig wäre hier:

unset array[$INDEX]

Pro-Linux
Traut euch!
Neue Nachrichten
Werbung