Beim Starten einer Shell werden viele Variablen bereits vordefiniert, die großteils veränderbar sind (HOME, PATH usw.). Ein kleinerer Teil kann nicht geändert werden (PPID).
Weiterhin gibt es Variablen, die eigentlich gar keine sind, sondern bei ihrem Aufruf etwas erzeugen und zurückgeben.
Die wichtigsten im Überblick:
Ausdruck | liefert: |
$# |
Anzahl Argumente |
$0 |
Name |
$1 ...$9 |
Parameter, bash auch: ${1} ...${9} und weitere |
$* |
alle Parameter |
"$*" |
alle Parameter als ein String |
$@ |
alle Parameter |
"$@" |
alle Parameter als je ein String |
$$ |
process id |
$? |
Rückgabewert/exit-Status des letzten Kommandos |
${ name- wert} |
Wenn name definiert ist, dann $ name , sonst wert |
${ name= wert} |
Wenn name definiert ist, dann $ name , sonst (name=wert) |
${ name+ wert} |
Wenn name definiert ist, dann wert , sonst Nullwert |
${ name?} |
Wenn name definiert ist, dann $ name , sonst (Abbruch) |
${ name? wert} |
Wenn name definiert ist, dann $ name , |
sonst (Ausgabe von wert, Abbruch) | |
${ name:- wert} |
Wenn name nicht Nullwert ist, d. $ name , sonst wert |
${ name:= wert} |
Wenn name nicht Nullwert ist, d. $ name , sonst (name=wert) |
${ name:+ wert} |
Wenn name nicht Nullwert ist, d. wert , sonst Nullwert |
${ name:?} |
Wenn name nicht Nullwert ist, d. $ name , sonst (Abbruch) |
${ name:? wert} |
Wenn name nicht Nullwert ist, d. $ name , |
sonst (Ausgabe von wert, Abbruch) |
Die Positionsparameter (1
etc., *
, @
) und die
Anzahl (#
) beziehen sich innerhalb einer Funktion auf die
Parameter, mit denen die Funktion aufgerufen wurde (siehe
Funktionen). Außerhalb von
Funktionen beziehen sie sich auf die Parameter des Shellprogramms.
Die Variablen 1
...,
*
, @
,
und #
kann man mit dem
Befehl shift beeinflussen.
shift (ohne Argumente) verwirft den ersten Parameter
$1
unwiderruflich, und rückt die anderen um eine Position auf. *
, @
, und
#
werden entsprechend angepaßt.
shift mit einer nachfolgenden Zahl verschiebt die Parameter analog dazu um
mehrere Plätze.
Mit dem (internen) Kommando set kann man
einerseits Optionen setzen, mit denen das Verhalten der Shell selbst
beeinflußt wird. Beispielsweise kann man mit set -o vi
bewirken, daß das Aufrufen und Ändern von alten Kommandos
mit vi-Befehlen erfolgt
(k für: eine Zeile aufwärts,
j für:
eine Zeile abwärts, h bzw. l
für: Cursor nach links/rechts, i um etwas einzufügen, ...).
Mit set -o emacs
kann man wieder vernünftigerweise auf die
Funktionen zurückschalten, wie man sie vom EMACS kennt.
Andererseits kann man mit set die
Positionsparameter $1
etc. auf beliebige Werte setzen. Die davon abhängigen Variablen #
, *
und @
ändern
sich dabei automatisch mit.
1
, 2
, und 3
:
klaus@aw35:~ >
set abc def ghi
klaus@aw35:~ >
echo $2
def
klaus@aw35:~ >
echo $#
3
klaus@aw35:~ >
echo $*
abc def ghi
AnyWare@Wachtler.de