David Haller
Hier soll doch sicher: $cmd "$@" || error "$cmd $@" stehen.
Korrekt.
(ich schreib seit ner Weile das function gerne explizit hin, dank Syntax Highlighting macht das die Sache uebersichtlicher ;) ist aber explizit bash (ok das skript auch), aber man sollte dran denken.
Sollte man nicht "$@" statt $* verwenden? ich kenne nur das idiom mit $*, Was wäre denn ein Beispiel wo es unterschiede macht?
Hm. Kommt mir fuer den Anwendungsfall ein wenig "aufgeblasen" for... Gemacksfrag, ich finde auch kleine Skripte sollten ein vernünftiges Interface bieten.
while test $# -gt 0; do case "$1" in -h | --help) usage; exit 0;; -*) usage; exit 1;; *) ARGS="$ARGS \"$1\""; shift;; esac; done; eval set -- $ARGS; test $# -gt 0 && { usage; exit 1; }
Dieser Code ist nicht äquivalent zu dem mit getopts. Grund: Die Unix-Optionen Konvention sagt, daß foo -abc xyz entweder bedeuten kann: foo -a -b -c xyz oder falls -a ein Argument nimmt: foo -a bc xyz Benutzt man das obige Muster, muß man dieses "Parameter auseinandernehmen" selbst machen. getopts erledigt das für einen. (BTW: Die gleiche Funktionalität gibt netterweise auch in der C-Bibliothek.)
Bitte OLD_IFS="$IFS" verwenden... wo liegt da der Unterschied?
Wozu hier das echo? Vom debuggen uebriggelassen? ;) jau, das ganze war sozusagen eine "Designstudie" ohne grösseren test. Mich interessierte einfach: wie splitte ich mit der Shell einen Zeile auf. (Wusse es bis dato auch nicht).
Erstmal die Quotezeichen so "escapen", dass wir Anfang und Ende unterscheiden koennen, dann die Feldtrenner innerhalb davon ebenfalls ersetzen und dann die Quotezeichen wiederherstellen: wieso? nur wg. des syntax highlights?
line="`echo \"$line\" | sed 's/\"\([^\"]*\)\"/§\1¶/g'`" das hab ich auch noch nicht gewusst, daß in einem " .. " String die back-ticks interpretiert werden. Man lernt nie aus.
Statt dreier Zeilen: line="`echo \"$line\" | sed 's/\"\([^\"]*\)\"/§\1¶/g'`" täte es auch: line="`echo \"$line\" | sed -e'...' -e'...' -e'...'`"
Wieder wuerde ich test verwenden, und ausserdem noch die Logik umdrehen: Ohne einen (der hier so beliebten Flamewar zu starten) Warum solle man test statt [ .. ] benutzen??? Ich denke sollte Aussagen sollten irgendwie begründet werden. (Damit der Leser auch was dabi lernt).
Bitte alle Variablen quoten... warum?
Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 9204871 Fax: +49(721) 24874 juergen@informatik-vollmer.de,vollmer@cocolab.de,Juergen.Vollmer@acm.org www.informatik-vollmer.de