In vielen Fällen muss ich Funktionen mit demselben Namen wie andere Programme erstellen und ich habe keine Ahnung, ob das eine gute Möglichkeit ist, Bash-Skripting zu verwenden.
Beispiel:
function echo () {
echo -n "$@" ;
}
Nach dem Testen sieht es so aus, als ob es Funktionsnamen im Skript vor Binärpfaden prüft. Ich möchte das und alle anderen Informationen, die ich wissen sollte, sicherstellen.
Antwort1
echo() {
command echo -n "$@"
}
Die Verwendung command
hier bedeutet, dass nach dem echo
Befehl (der hier zufällig integriert ist) und nicht nach der Funktion gefragt wird, die sonst Vorrang hätte.
Und da es sich hier echo
zufällig auch um ein integriertes Element handelt (wird übrigens nicht nachgeschlagen, $PATH
da integrierte Elemente Vorrang vor Dateisystembefehlen haben), können Sie auch Folgendes tun:
echo() {
builtin echo -n "$@"
}
Dieser letztere Ansatz ist in vorzuziehen zsh
, wo stattdessen command echo
ausgeführt würde /bin/echo
(außer bei sh
Emulation).
Es gibt einige geringfügige Unterschiede zwischen den Shells, die Rangfolge ist jedoch im Allgemeinen:
- spezielle Einbauten
- Funktionen
- eingebaute
- Befehle in
$PATH
(und die Reihenfolge hängt von der Reihenfolge in$PATH
und in derhash
Tabelle ab, wie sie vomhash
integrierten Befehl verwaltet wird)
Beachten Sie, dass Aliase und Schlüsselwörter in der Shell-Syntax ( for
, if
...), wenn sie nicht in Anführungszeichen stehen, vor diesen berücksichtigt werden.
Die Reihenfolge von 1
und 2
ist in einigen Shells, wie etwa bash
oder , umgekehrt zsh
. bash
Lässt nicht zu, dass Funktionen mit demselben Namen wie ein spezielles integriertes Element definiert werden, wenn sie als aufgerufen werden sh
.