Welchen Unterschied machen Sie zwischen "kleinem Programm" und "Funktion"?
JdeBP
Sie können Befehle in ein Shell-Programm eingeben, mit denen Sie die Shell so programmieren können, dass sie funktioniert, und Befehle mithilfe von Funktionen übernehmen, mit denen die Shell programmiert wurde, um andere Programme aus den Shell-Funktionen heraus zu befehlen.
txtechhelp
Antworten:
15
Es hängt davon ab, ob.
Befehle können in mehrere Kategorien unterteilt werden: integrierte Funktionen, Aliase, Funktionen, ausführbare Dateien (Skripts und Binärdateien im Suchpfad).
In der Befehlszeile belegen diese einen einzelnen, flachen Namespace, der das Überschreiben ermöglicht. Es gibt zahlreiche Möglichkeiten, Arten von Programmen voneinander zu unterscheiden:
$ f (){:;}
$ alias a=cat
$ which f
f (){:}
Wir wissen, dass fdas eine Funktion ist.
$ which a
alias a='cat'/usr/bin/cat
Wir wissen, dass dies aein Alias ist.
$ which yes/usr/bin/yes
Wir wissen, dass yesdas ein Programm ist.
$ builtin echo ; echo $?0
Die Schale hat eine echoeingebaute…
$ builtin cat ; echo $?
bash: builtin: cat: not a shell builtin1
… Aber keine für cat. Wenn es einen eingebauten oder einen Alias gibt, Sie aber darauf bestehen, stattdessen das Programm aufzurufen, stellen Sie dem Befehl einen Backslash voran:
Ein Befehl, der ein Programm in einer Implementierung von * nix ist, kann auch zu einer in einer anderen integrierten Shell (= Funktion) werden.
Jamesqf
1
@jamesqf, ja, in Shell sind Standardwerkzeuge integriert, aber eingebaute Befehle sind nicht dasselbe wie Funktionen. Führen Sie zBsh -c 'type true; f() { echo x; }; type f'
@ilkkachu: Das hängt von deiner Definition von "das gleiche wie" ab. Natürlich sind sie unterschiedlich implementiert, aber für den normalen Benutzer, der einen Befehl eingibt, sind sie funktional gleich.
Jamesqf
1
@jamesqf, selbst wenn Ihr gewöhnlicher Benutzer keine Funktionen verwendet (weiß), ist die Behauptung, dass sie mit den integrierten Funktionen identisch sind, nur verwirrend.
Ilkkachu
4
Die Definition von a functiongibt einzelne Werte zurück und gibt nichts aus. Insbesondere Shell-Funktionen können sehr gut eine Ausgabe oder andere Nebenwirkungen haben, da der Rückgabewert von Funktionen so begrenzt ist.
A commandist eine Anweisung eines Benutzers, einen Computer anzuweisen, etwas zu tun, beispielsweise ein einzelnes Programm oder eine Gruppe verknüpfter Programme auszuführen.
A programist eine Folge von Anweisungen (dh Befehlen), die einem Computer gegeben werden und von der Zentraleinheit (CPU) des Computers verstanden werden können. Diese Anweisungen geben an, welche Vorgänge der Computer an einem Datensatz ausführen soll.
Allerdings functionssind logische Teilmenge des Programms. Das Anrufen einer Person liegt ganz in Ihrem Prozess. Das commandist ein Programm (oder eine eingebaute Shell), das über die Befehlsshell ausgeführt werden kann. Der Befehl implementiert Funktionen, die eine Aufgabe ausführen. Das Gegenteil ist nicht richtig.
"Eine Funktion gibt einen einzelnen Wert zurück und gibt nichts aus" - na ja, vielleicht im mathematischen Sinne. In imperativen Programmiersprachen bedeutet "Funktion" jedoch häufig nur eine Unterroutine, die alles kann. Insbesondere Shell-Funktionen können sehr wohl Ausgabe- oder andere Nebenwirkungen haben, da der Rückgabewert von Funktionen so begrenzt ist.
Ilkkachu
@ilkkachu. Vielen Dank. Ich habe die Antwort aktualisiert. Bitte
3
Ich denke, diese Definitionen stammen aus einem Programmiersprachenkontext, nicht aus einem Shell-Kontext. Ja, ich weiß , die Shell - Sprache ist eine Programmiersprache, aber seine Idee einer „Funktion“ ist ganz anders als die mathematische oder informatik Definition - in der Schale, alle Befehle (ob builtins, Funktionen, Aliase, Programmen oder Skripte) Akt gleich und sind einfach verschiedene Arten der Implementierung.
Toby Speight
1
... * meistens * gleich; Builtins können den Status der Shell selbst ändern, während externe Programme nicht aufrufen können chdir()oder setenv()in der Shell, die für sie ein eindeutiger übergeordneter Prozess ist.
Charles Duffy
1
Ich möchte wissen, ob die Befehle, die wir in der Shell aufrufen, Funktionen oder Programme sind.
Ja.
Insbesondere wenn Sie Text eingeben und drücken enter, muss die Shell bestimmen, ob:
Antworten:
Es hängt davon ab, ob.
Befehle können in mehrere Kategorien unterteilt werden: integrierte Funktionen, Aliase, Funktionen, ausführbare Dateien (Skripts und Binärdateien im Suchpfad).
In der Befehlszeile belegen diese einen einzelnen, flachen Namespace, der das Überschreiben ermöglicht. Es gibt zahlreiche Möglichkeiten, Arten von Programmen voneinander zu unterscheiden:
Wir wissen, dass
f
das eine Funktion ist.Wir wissen, dass dies
a
ein Alias ist.Wir wissen, dass
yes
das ein Programm ist.Die Schale hat eine
echo
eingebaute…… Aber keine für
cat
. Wenn es einen eingebauten oder einen Alias gibt, Sie aber darauf bestehen, stattdessen das Programm aufzurufen, stellen Sie dem Befehl einen Backslash voran:quelle
sh -c 'type true; f() { echo x; }; type f'
type
vorzuziehen istwhich
. Siehe unix.stackexchange.com/q/85249/135943Die Definition von a
function
gibt einzelne Werte zurück und gibt nichts aus. Insbesondere Shell-Funktionen können sehr gut eine Ausgabe oder andere Nebenwirkungen haben, da der Rückgabewert von Funktionen so begrenzt ist.A
command
ist eine Anweisung eines Benutzers, einen Computer anzuweisen, etwas zu tun, beispielsweise ein einzelnes Programm oder eine Gruppe verknüpfter Programme auszuführen.A
program
ist eine Folge von Anweisungen (dh Befehlen), die einem Computer gegeben werden und von der Zentraleinheit (CPU) des Computers verstanden werden können. Diese Anweisungen geben an, welche Vorgänge der Computer an einem Datensatz ausführen soll.Allerdings
functions
sind logische Teilmenge des Programms. Das Anrufen einer Person liegt ganz in Ihrem Prozess. Dascommand
ist ein Programm (oder eine eingebaute Shell), das über die Befehlsshell ausgeführt werden kann. Der Befehl implementiert Funktionen, die eine Aufgabe ausführen. Das Gegenteil ist nicht richtig.quelle
chdir()
odersetenv()
in der Shell, die für sie ein eindeutiger übergeordneter Prozess ist.Ja.
Insbesondere wenn Sie Text eingeben und drücken
enter
, muss die Shell bestimmen, ob:alias
,quelle