shell script expansion ...

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

shell script expansion ...

Beitrag von meandtheshell » 07.02.2006 12:40:24

folgender link enthält ein script zum übersetzen von texinfo source in diverse output formate
http://cvs.savannah.gnu.org/viewcvs/tex ... iew=markup

meine Frage bezieht sich auf folgendes snippet:

Code: Alles auswählen

scripturl="http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs.sh"
templateurl="http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs_template"

: ${MAKEINFO="makeinfo"}
: ${TEXI2DVI="texi2dvi -t @finalout"}
: ${DVIPS="dvips"}
: ${DOCBOOK2TXT="docbook2txt"}
: ${DOCBOOK2HTML="docbook2html"}
: ${DOCBOOK2PDF="docbook2pdf"}
: ${DOCBOOK2PS="docbook2ps"}
: ${GENDOCS_TEMPLATE_DIR="."}
unset CDPATH
wozu sind hier die (Doppelpunkte) am Zeilen Anfang vorhanden?
IMHO könnte man diese weglassen - nein?

markus

yeti

Beitrag von yeti » 07.02.2006 13:33:41

Ich hab's ja fast selbst nicht geglaubt ...

Code: Alles auswählen

(yeti@vash:0)~$ echo $X

(yeti@vash:0)~$ : ${X=y}
y
(yeti@vash:0)~$ : ${X=z}
(yeti@vash:0)~$ echo $X
y
... und in "man bash" finde ich zur Zuweisung mit = in {...} keinen Hinweis.
Oder ist das garnicht für die Bash gedacht?

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 07.02.2006 13:42:38

@yeti
deine Versuche habe ich auch schon durchgespielt - gleiches Resultat ...

Eine zweite Sache die ich seltsam finde ist das:

wie in der offiziellen docu [1] mit :=

Code: Alles auswählen

${parameter:=word}
was aber auch geht und das gleiche Ergebnis liefert wie mit := ist das

Code: Alles auswählen

: ${parameter=word}
[1] http://cnswww.cns.cwru.edu/~chet/bash/b ... html#SEC30
Und das ist sicher für die bash. Sie ist die "GNU shell".


markus
Zuletzt geändert von meandtheshell am 07.02.2006 13:56:37, insgesamt 1-mal geändert.

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 07.02.2006 13:51:52

Die Sache ist die, dass der Doppelpunkt auch am Zeilen Anfang also vor dem "$" stehen kann. Das ist allerdings in der offizellen docu nicht drin.

offiziell ist es so:

Code: Alles auswählen

${parameter:=word}
FAZIT:
Doppelpunkte am Zeilen Anfang haben also keine spezielle Funktion, sie sind lediglich möglich wenn man diese Art der Parameter Expansion verwendet.

Meiner Meinung nach sollte man es nicht machen da es Leute nur verwirrt. Man soll die offizielle Syntax Variante verwenden.

markus

yeti

Beitrag von yeti » 07.02.2006 14:03:19

Daß man per ${name:=wert} was zuweisen kann, scheint mir in Einklang mir der Manpage von Bash zu sein ...

Code: Alles auswählen

${parameter:-word}
       Use Default Values.  If parameter is unset or null,  the expan-
       sion  of word is substituted.  Otherwise, the value of parameter
       is substituted.
${parameter:=word}
       Assign Default Values.  If  parameter  is  unset  or  null,  the
       expansion of word is assigned to parameter.  The value of param-
       eter is then substituted.   Positional  parameters  and  special
       parameters may not be assigned to in this way.
":-" wirkt also nur ersetzend für den aktuellen Einsatz der Variable als Parameter, ":=" ist eine knallharte Zuweisung.

Da ":" nur seine Argumente auswertet und sonst Nix tut, kommt solche Expandierung im Gegensatz zu hinter einem "#" auch zum Tragen.

Daß es auch per = ohne : davor geht, ist der Punkt, der mich wundert.

yeti

Beitrag von yeti » 07.02.2006 14:08:18

Der ":" als Befehl und der ":" in der In-{}-Expandierung haben nichts miteinander zu tun. ":" ist ein ganz normales Bash-Kommando ...

Code: Alles auswählen

: [arguments]
       No  effect;  the command does nothing beyond expanding arguments
       and performing any specified redirections.  A zero exit code  is
       returned.
Also bleibt es bisher unerklärt, warum "=" ohne ":" davor bei der In-{}-Expandierung eine Zuweisung auslöst.

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 07.02.2006 14:36:20

Der Doppelpunkt am Zeilen Anfang und jener in der geschweiften Klammer haben tatsächlich nichts miteinander zu tun

Doppelpunkt bei der Parameter Expansion innerhalb von ${ ...}
http://www.linux-ag.de/linux/LHB/node26.html#defaults

Jener Doppelpunkt der am Zeilen Anfang
http://www.linux-ag.de/linux/LHB/node26 ... 0000000000

Ich habe vergessen ob ich das vergessen habe. Mir ist so als hätte ich das zumindest vor >Jahr einmal gelesen :x

markus

Antworten