Shell-Variablen
CIP Index Up Left Right

Shell-Variablen

Die Shell kann sich Variablen merken, jede besteht aus einer Zuordnung eines Namens zu einem Wert. Namen sind Wörter aus bis zu 20 Buchstaben oder Ziffern; als Wert sind Null oder mehr beliebige Wörter erlaubt.

Den Wert einer Variablen erhält man, indem man ein Dollar-Zeichen gefolgt vom Namen der gewünschten Variablen schreibt: z.B. wird echo $gid ersetzt zu echo 20001, da die Variable "gid" den Wert "20001" enthält (meistens). Man kann Variablen an jeder Stelle einer Kommandozeile verwenden, nur innerhalb von Einfachhochkommas oder wenn das Dollarzeichen von einem Backslash gefluchtet wird (\$) wird nicht ersetzt (z.B. gibt echo '$gid' den String $gid aus). Innerhalb von Doppelhokommas ( " ) wird jedoch ersetzt. (Siehe auch Quoting)

Definiert wird eine Variable per set var=value oder einfach set var, wenn man ihr einen Null-String zuweisen möchte. Mit unset var kann man eine Variable wieder entfernen. set ohne Parameter listet alle definierten Variablen. Für Environment-Variable setzt man hinter jeden Kommandonamen ein env, siehe unten bei Syntax.

Shell-internen Variable

Man unterscheidet zwei Arten von Variablen: Die erste ist die Shell-interne Variable (einfach Shell-Variable). Sie dient im wesentlichen dazu, das Verhalten der Shell zu beeinflussen.

So kann man z.B. durch Entfernen der Variablen ignoreeof einstellen, daß die Shell nun doch durch Drücken von CONTROL-D verlassen werden kann (nicht empfehlenswert), was bei gesetzter Variable nur zu einer Fehlermeldung führt.

Eine Liste aller Shell-Steuerungs-Variablen ist im csh-Manual im Abschnitt Environment Variables and Predefined Shell Variables zu finden. Einige sind in einer Liste der wichtigsten Shell-Variable zusammengefaßt.

Man kann Shell-Variablen außerdem noch zur Tipperleichterung benutzen (kurzer Variablenname statt eines langen Strings), oder in Shell-Scripten, wo sie dieselbe Funktion übernehmen wie Variablen in Programmiersprachen.

Syntax
set variable=value
echo $variable

set variable=(value1 value2 value3 ... )
echo $variable[index]

Das zweite Beispiel definiert eine Liste, d.h. ein Array von Werten in einer Variablen. Die Variable $path ist z.B. so eine Liste. Mit Environment-Variablen funktionieren keine Listen! Dort schreibt man ersatzweise value1:value2 ohne Klammern.

Environment-Variablen

Eine andere Art von Variablen sind die Environment-Variablen. Der wesentliche Unterschied zu den Shell-internen Variablen ist, daß diese hier an alle gestarteten Programme übergeben werden, d.h. jeder Prozeß bekommt eine Liste mit allen definierten Environment-Variablen übergeben (siehe man environ, Variable envp).

Dieser Mechanismus wird dazu benutzt, den gestarteten Programmen Informationen über ihre Umwelt zukommen zu lassen (deshalb Environment). So sagt die Variable TERM allen Programmen, was für ein Terminal benutzt wird. Die Bedeutung der Variablen ist ganz und gar von den gestarteten Programmen abhängig. Siehe auch Liste der wichtigsten Environment-Variablen.

Der leichteren Unterscheidung wegen schreibt man übrigens alle Shell-interne Variablen klein, Environment-Variable dagegen groß.

Syntax
setenv variable value

Bourne-Shell

Die Definition von Variablen unterscheidet sich bei der Bourne-Shell. Das Kommando set muß hier nicht extra angegeben werden - wenn ein Gleichheitszeichen im ersten Wort ist, wird automatisch eine Zuweisung durchgeführt. Um Environment-Variable zu definieren, muß zuerst eine Shell-Variable definiert werden und diese dann nachträglich exportiert werden:
variable=value
export variable

Siehe auch:
Liste wichtiger Environment-Variable
Liste wichtiger Shell-Variable