Re: Bedingtes Setzen von bash-Umgebungsvariablen [was: Re: Konsole ist bei mutt farbenblind]

From: Oliver Fromme <olli(at)secnetix.de>
Date: Fri, 18 Oct 2002 15:08:20 +0200 (CEST)

Dominik Brettnacher <domi(at)saargate.de> wrote:
> On Fri, 18 Oct 2002, Christian Lackas wrote:
> > if [ ${TERM}x = "xtermx" ]; then
>
> Mal ne unbedarfte Frage, weil ich das jetzt schon häufiger gesehen habe:
> warum macht man immer diesen Spass mit dem angehängten x?

> Warum tut es nicht auch
>
> if [ ${TERM} = "xterm" ]; then

Weil die sh keine richtigen Variablen kennt (auch wenn sie
so genannt werden), sondern nur Makros. In einer Makro-
sprache muß auch nach der Expansion der Makros die Syntax
stimmen, was nicht der Fall wäre, wenn in Deinem Beispiel
TERM nicht gesetzt wäre oder einen leeren Inhalt hätte.
Fies ist auch, wenn sowas Whitespace enthält, mit einem "-"
anfängt oder sonst einen Inhalt hat, der eine Sonderbedeu-
tung für test hat.

Um ganz auf Nummer sicher zu gehen, schreibt man das "x"
daher _vor_ die Variable (ich nehme meistens keinen Buch-
staben, weil es die Lesbarkeit herabsetzt), und faßt das
ganze in Anführungszeichen ein. Die Anführungszeichen um
den rechten Teil sind dagegen völlig überflüssig.

if [ ":$TERM" = :xterm ]; then

Alternativ kann man case nehmen. Hat den Vorteil, daß es
_jede_ sh als built-in hat (im Gegensatz zu test), d.h. es
ist effizienter. Die Syntax ist schauerlich, aber es funk-
tioniert. Ein weiterer Vorteil ist, daß man bei case Glob-
characters verwenden kann, z.B.:

case "$TERM" in xterm*) ... ;; esac.

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co KG, Oettingenstr. 2, 80538 München
Any opinions expressed in this message may be personal to the author
and may not necessarily reflect the opinions of secnetix in any way.
"All that we see or seem is just a dream within a dream" (E. A. Poe)
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Fri 18 Oct 2002 - 15:08:23 CEST

search this site