Alle Variationen der Bourne-Shell-Sprache sind im Vergleich zu modernen Skriptsprachen wie Perl, Python, Ruby, node.js und sogar (wohl) Tcl objektiv schrecklich. Wenn Sie etwas kompliziertes tun müssen, werden Sie auf lange Sicht glücklicher sein, wenn Sie eines der oben genannten anstelle eines Shell-Skripts verwenden.
Der einzige Vorteil, den die Shell-Sprache gegenüber diesen neueren Sprachen noch hat, ist, dass etwas , das sich selbst nennt /bin/sh
, auf allem, das vorgibt, Unix zu sein, garantiert existiert. Dies ist jedoch möglicherweise nicht einmal POSIX-konform. viele der Legacy - proprietäre Unix - Varianten froren die Sprache umgesetzt durch /bin/sh
und die Dienstprogramme in dem Standardpfad vor den Änderungen durch Unix95 gefordert (ja, Unix95, vor zwanzig Jahren und Zählen). Möglicherweise gibt es eine Reihe von Unix95- oder sogar POSIX.1-2001-Tools, wenn Sie Glück haben, die sich in einem Verzeichnis befinden, das sich nicht auf dem Standardpfad befindet (z. B. /usr/xpg4/bin
), deren Existenz jedoch nicht garantiert ist.
Es ist jedoch wahrscheinlicher , dass die Grundlagen von Perl in einer willkürlich ausgewählten Unix-Installation vorhanden sind, als dies bei Bash der Fall ist. (Mit "den Grundlagen von Perl" meine ich, dass /usr/bin/perl
es eine , möglicherweise ziemlich alte, Version von Perl 5 gibt, und wenn Sie Glück haben, sind auch die Module verfügbar, die mit dieser Version des Interpreters geliefert wurden.)
Deshalb:
Wenn Sie etwas schreiben, das überall dort funktionieren muss, wo es sich um Unix handelt (z. B. ein "configure" -Skript), müssen Sie es verwenden #! /bin/sh
, und Sie müssen keinerlei Erweiterungen verwenden. Heutzutage würde ich unter diesen Umständen eine POSIX.1-2001-kompatible Shell schreiben, aber ich wäre bereit, POSIXisms auszubessern, wenn jemand um Unterstützung für rostiges Eisen bittet.
Wenn Sie jedoch nicht überall etwas schreiben, das funktionieren muss, sollten Sie in dem Moment, in dem Sie versucht sind, Bashismus überhaupt zu verwenden, das Ganze stoppen und stattdessen in einer besseren Skriptsprache umschreiben. Dein zukünftiges Ich wird es dir danken.
(Wann ist es angebracht, Bash-Erweiterungen zu verwenden? Bei der ersten Bestellung: Nie. Bei der zweiten Bestellung: Nur zur Erweiterung der interaktiven Bash-Umgebung - z.
#!/bin/sh
nichts anderes als die von der Original-Shell bereitgestellte.