Nehmen Sie einen Hinweis aus den Autotools: Halten Sie sich an den kleinsten gemeinsamen Nenner der Bourne- und POSIX-Shell - möglicherweise ergänzt durch sed
-, wenn Sie etwas schreiben müssen, das überall funktionieren muss . Es kann Systeme geben, in denen etwas kaputt geht, aber Sie können solche Probleme umgehen, indem Sie sie neu schreiben.
Beispielsweise haben einige alte Systeme Probleme mit Erweiterungsfehlern test
, auch bekannt als [
:
if [ $foo = bar ] ; then...
so ist die Autoconf Praxis neu zu schreiben , in doppelten Anführungszeichen mit einem einzelnen Zeichen - Präfix, etwa so:
if [ x"$foo" = "xbar" ] ; then...
Sie könnten auch "x$foo"
hier verwenden. Dies schützt vor der Möglichkeit, $foo
dass eine gültige Option für den Ausdruck sein könnte test(1)
, und da dies [
ein Alias für test
ihn ist, könnte sie ihn falsch interpretieren. Die Lösung besteht darin, eine Situation einzurichten, in der das unbekannte Argument [
immer mit beginnt x
, was bedeutet, dass es keine besondere Bedeutung haben kann [
.
(Autoconf empfiehlt auch die Verwendung von test
anstelle von [
, aber dieser Rat kommt als Reaktion auf mögliche Konflikte mit M4 zustande , das auch [
in seiner Syntax verwendet wird.)
awk ist POSIX und daher theoretisch überall verfügbar. Es ist sogar in Busybox enthalten , sodass Sie awk
auch in einigen sehr restriktiven eingebetteten Linux-Systemen eine Implementierung haben . Dennoch wäre ich weniger überrascht, wenn ich auf ein System ohne awk
als stoßen würde sed
. Ich nehme an, es kommt auf die Komplexität an: Einfachere Werkzeuge überstehen mit größerer Wahrscheinlichkeit die aggressive Triage.
Perl ist kein Bestandteil eines weit verbreiteten Standards, weder POSIX noch eines anderen. Sie können sich also einfach nicht darauf verlassen, wenn Sie im Voraus nichts über die Zielumgebung wissen. Perl ist nicht standardmäßig installiert in:
- Cygwin
- FreeBSD und NetBSD
- "Minimal" -Installationen für einige Linux-Betriebssysteme, einschließlich Slackware
- viele eingebettete Linuxe, die in erster Linie auf Busybox als Benutzer angewiesen sind
Das Autoconf-Handbuch enthält ein Kapitel zur portablen Shell-Programmierung, das Ihnen hilfreich sein sollte. Die letzten Abschnitt behandelt Werkzeuge wie sed
, awk
und viele andere.