Variablen tragen unter OpenVMS den Namen **Symbols** und können mehr als nur Zahlen und Buchstaben speichern. ======Gültigkeitsbereiche====== Symbols können entweder eine **lokale** oder **globale** Gültigkeit aufweisen. Ein //lokales// Symbol hat nur eine begrenze Gültigkeit während ein //globales// Symbol auch über mehrere Prozessebenen hinweg, z.B. verzweigte Batch-Jobs, gültig sein kann. ======Definition====== Ein Symbol wird wie folgt definiert: $ SYMBOL_NAME OPERATOR WERT Das folgenden Beispiel erstellt ein lokales Symbol namens **FOO**, das den Wert "**BAR**" enthält: $ FOO = BAR Der Operator entscheidet über den Gültigkeitsbereich und den Datentyp des Symbols: ^Operator^Gültigkeitsbereich^Datentyp^ |=|lokal|String/Integer| |:=|lokal|String| |==|global|String/Integer| |:==|global|String| Einige weitere Beispiele: $ FOO := BAR ! erstellt ein lokales Symbol FOO, das den String "BAR" enthält $ ZAHL == 12 ! erstellt ein globales Symbol ZAHL, das die Zahl 12 speichert $ BSP :== AB ! erstellt ein globales Symbol BSP; das den String "AB" erhält ======Ausgabe====== Der Inhalt von Symbole wird mithilfe des **[[computer:openvms:show|SHOW]]**-Befehls ausgegeben. Angenommen, die folgenden beiden Symbole wurden definiert: $ FOO = BAR $ ZAHL = 1337 Die Ausgabe der Symbole erfolgt nun wie folgt: $ SHOW SYMBOL FOO FOO = "BAR" $ SHOW SYMBOL ZAHL ZAHL = 12 Hex = 0000000C Octal = 00000000014 Bei numerischen Symbolen wird der Wert in **dezimal** (//10er Basis//), **hexadezimal** (//16er Basis//) und **oktal** (//8er Basis//) ausgegeben. ======Befehlsaliase====== Wenn bereits vorhandene Kommentare oft mit bestimmten Qualifizierern ausgeführt werden, können diese in einem eigenen gleichnamigen Alias definiert werden. Angenommen, Dateien werden immer auf der Druckerwarteschlange **PRINTERD** ausgedruckt - der folgende Alias (//übrigens ein globales String-Symbol//) verhindert, dass der Qualifizierer **/QUEUE=PRINTERD** jedes Mal explizit angegeben werden muss: $ PRINT :== PRINT/QUEUE=PRINTERD =====Abbreviations===== In DCL werden Befehl oftmals abgekürzt - von nahezu jedem Befehl gibt es eine logische Kurzform, beispielsweise **DELETE**/**DEL** oder **EDIT**/**EDT**. Eine solche **Abbreviation** wird z.B. wie folgt definiert: $ PR*INT :== PRINT/QUEUE=PRINTERD Der Befehlsalias **PRINT** führt den Befehl PRINT automatisch mit dem Qualifizierer **/QUEUE=PRINTERD** aus und kann auch als **PR** abgekürzt werden. ======Arithmetische Berechnungen====== Es ist auch möglich, mit Symbolen zu rechnen - hierfür stehen die üblichen 4 Operatoren zur Verfügung: ^Operator^Verwendung^ |**+**|Addition| |**-**|Subtraktion| |*****|Multiplikation| |**/**|Division| DCL kennt auch runde Klammern und verwendet diese zur Definition von Berechnungsreihenfolgen. Zwei Beispiele: $ ZAHL = 2 * (5+5) $ SHOW SYMBOL ZAHL ZAHL = 20 Hex = 00000014 Octal = 00000000024 $ ZAHLB = ZAHL * 2 $ SHOW SYMBOL ZAHLB ZAHL = 40 Hex = 00000028 Octal = 00000000050 DCL kennt leider nur Ganzzahlen - Kommazahlen werden **nicht** unterstützt! ======String-Verkettung====== Strings können mithilfe des Plus-Operators aneinander gehängt werden: $ WORT = "WELT" $ WORT := "HALLO " + WORT $ SHOW SYMBOL WORT WORT = "HALLO WELT" Da die Shell in aller Regel von rechts beginnt Kommandos abzuarbeiten, erhält das Symbol **WORT** den Wert "//HALLO WELT//". ======Entfernen====== Symbole werden mithilfe des **DELETE**-Kommandos entfernt - bei globalen Symbolen wird noch der Qualifizierer **/GLOBAL** benötigt: $ WORTA = "Hallo" $ WORTB == "Welt" $ DELETE/SYMBOL WORTA $ DELETE/SYMBOL/GLOBAL WORTB