Zuweisung in sh

Hallo,

was ist eigentlich der Unterschied zwischen den beiden Zuweisungen:
Code:
MYVAR[B]?=[/B]   15
und
Code:
MYVAR[B]=[/B]   15

bei >man sh nicht fündig geworden und googlen schluckt das "?"

Danke Harald
 
Wo hast du das gefunden? Das hat mit Sicherheit nichts mit irgendeiner Shell zu tun.

Code:
MYVAR?=   15
Das ist kein gültiger Ausdruck in einer mir bekannten Shell.

Code:
MYVAR=   15
Das weist $MYVAR einen leeren Wert zu und führt das Kommando 15 aus, wobei diese Zuweisung an $MYVAR nur im Environment von 15 sichtbar ist.
 
shell ist nicht ganz der richtige Name. Ich meine shell-script.
!/bin/sh
Das hat mit Sicherheit nichts mit irgendeiner Shell zu tun.
Findet man in Makefiles die wohl mit sh ausgeführt werden z.B auszug:
Code:
PORTNAME=	apache
...
MAINTAINER?=	clement@FreeBSD.org
COMMENT?=	Version 2.2 of Apache web server with ${WITH_MPM:L} MPM.
...
Oder welche Scriptsprache wird in der Makedatei verwendet? Am Anfang steht kein !/bin... oder so also wohl die Standard shell "sh".
Danke!
 
Makefiles werden durchgenommen mit... na? *ratter* *ratter*















...






make! :)

Syntaktisch manchmal aber zugegebenermassen etwas seltsam und auch etwas Shell-aehnlich. Hat damit aber nun wirklich ueberhaupt nichts zu tun.
 
HaraldLangner said:
shell ist nicht ganz der richtige Name. Ich meine shell-script.
Das macht exakt überhaupt keinen Unterschied.

HaraldLangner said:
!/bin/sh
Findet man in Makefiles die wohl mit sh ausgeführt werden z.B auszug:
Du findest weder !/bin/sh in Makefiles noch werden Makefiles mit irgendeiner Shell ausgeführt. Makefiles heißen so, weil sie von make(1) interpretiert werden. In dessen Manpage findest du auch:
Code:
?=      Assign the value to the variable if it is not already defined.
 
Du könntest Dir die Manpage zu make ansehen (die sind bei den BSDs nämlich wirklich gut), also

#man make

Wenn ich das richtig im Kopf habe, dann sollte ?= den Wert nur zuweisen, wenn vorher kein anderer zugewiesen wurde, also Rücksicht auf vorgegebene Werte nehmen.

Also, man make, dann kannst du noch mit / oder ? vor/rückwärts suchen.

Nachtrag:

Ups, hat ja 0815Chaot schon gesagt...
Naja, Redundanz schadet nicht. Der Whitespace nach Zuweisungsoperatoren (=, ?=, :=, ...) wird von make übrigens, ganz im Gegensatz zur sh, ignoriert.
 
Last edited:
Auf solche Fragen sollte man doch eigentlich nur mit Varianten von RTFM antworten.
 
Naja, er hat ja versucht zu googeln und die manpage aufzurufen. Ich bin selbst noch ein Frischling, da hat man Verständnis ;)
 
Jo - das ist die Antwort - also eine bedingte Zuseisung.
Im wiki war ich natürlich nicht :rolleyes: aber sonst fast überall, wie in diesem buch [en] http://www.netbsd.org/Documentation/pkgsrc/pkgsrc.pdf Chapter 9 in dem ich aber keine Erklärung für ?= fand.

Ist make tatsächlich ein selbständiger Interpreter mit eigener Synthax oder benutzt make verleicht doch die Shell sh um, mit anderen Aufgaben, die Installationsdateien zu intepretieren?
 
Ich bin selbst nicht gerade ein Experte, aber ich würde Dir raten, make als eigenständigen Interpreter zu betrachten. Konkret meine ich damit:

Du musst dich mit man make oder ähnlicher Dokumentation auseinandersetzen, da make eine eigene Syntax hat. Shell Kenntnisse allein helfen dir da nicht weiter, auch wenn Shell-Kommandos bei Makefiles Verwendung finden. Auch die Formatierung ist bei Makefiles wichtig. (Shell-Kommandos z.B. nach <Tab>)

Also, viel Spass beim lernen :)
 
Ja, habe es gerade gesehen. Irgendwie habe ich wohl zu kompliziert gedacht und nur in "man sh" gesucht - die Scriptsprachen sind manchmal zimmlich änlich, und welche Scriptspache in Makefiles Verwendung findet.....naja

ahja - in der Datei /usr/ports/www/apache22/work/httpd-2.2.0/configure
steht oben ein "#! /bin/sh" deshalb bin ich auf die sh gekommen - wie gesagt lerne gerade zu installieren und zu konfigurieren..:)

Danke soweit!
 
Last edited:
Configure Skripte sind keine make files. Make ist ein interpreter, kann aber Befehle an die Shell weiterreichen.
 
aspiring said:
Du könntest Dir die Manpage zu make ansehen (die sind bei den BSDs nämlich wirklich gut), ...

Und /usr/share/doc/psd/12.make, auch wenn's etwas veraltet ist.
 
Danke aspirint,

das ist wirklich eine gute Einführung in make. Du weist es sicher, aber für die die es nicht wissen und dies hier lesen: bei der beschreibung von selflinux... geht es um das

GNU make das ist nicht dasselbe wie das make von BSD.

Auf BSD gibt für GNU make das Programm gmake um Quellcode direkt zu übersetzen. Ich selber habe aber bisher nur das BSD make für die Ports benutzt. Die Skriptregeln beider make's sind vermutlich die gleichen.
 
Keine Ursache!

In der Regel ist es so, dass die GNU-Tools weitestgehend die gleiche Funktionalität haben (POSIX), aber darüberhinaus meist (mehr oder weniger brauchbare) Erweiterungen beinhalten. (-> oft mit vielen zusätzlichen Optionen "überladen").

Ist schon eine Weile her, dass ich Selflinux durchgelesen habe, aber da es sich hier um eine Einführung handelt, sollte das keinen großen Unterschied machen.

_Beide_ makes automatisieren Kompiliervorgänge anhand der Makefiles!
(Natürlich kann man ein Makefile auch so anlegen, dass es z.B. nur Dateien entpackt. Ist flexibel)
 
Last edited:
Back
Top