Variablenoptionen mit Punkt setzen

Variablenoptionen mit Punkt setzen

Ich versuche, eine Schnittstelle zu einem System herzustellen, das nicht von mir verwaltet wird und das einige Unix-Befehlsskripte und -Befehle ausführt, um einen Job einfach auszuführen.

Es gibt eine Variablensubstitution, die nicht funktioniert, und ich frage mich, ob ich einen Befehl schreiben kann, um die Situation zu vermeiden. Es müssen viele Variablen festgelegt werden, und ich möchte die Möglichkeit haben, eine leere Variable einzugeben. Das Problem ist, dass das System keine leere Variable übergibt und die Variable einfach nicht festlegt. Ich erhalte

${option.VARIABLE}: ungültige Ersetzung

Ich versuche, so etwas einzustellen, aber es funktioniert nicht.

wenn [ -z ${option.VARIABLE} ]; dann option.VARIABLE=""; fi;

Irgendeine Idee?

Antwort1

Ein Punkt ist kein gültiges Zeichen in einem Variablennamen. Im Bash-Handbuch steht (Hier)

Name

Ein Wort, das ausschließlich aus Buchstaben, Zahlen und Unterstrichen besteht und mit einem Buchstaben oder Unterstrich beginnt. Namen werden als Shell-Variablen- und Funktionsnamen verwendet. Wird auch als Bezeichner bezeichnet.


Auf meiner Manpage zu ksh93 steht jedoch:

Definitionen.

[...] Ein Bezeichner ist eine Folge von Buchstaben, Ziffern oder Unterstrichen, die mit einem Buchstaben oder Unterstrich beginnt. Bezeichner werden als Komponenten von Variablennamen verwendet. Ein vname ist eine Folge von einem oder mehreren Bezeichnern, die durch ein . getrennt sind und denen optional ein . vorangestellt werden kann. vnames werden als Funktions- und Variablennamen verwendet.

Dieser Teil scheint für Ihr Problem am relevantesten zu sein (Hervorhebung von mir):

Parametererweiterung.

[...] Eine Variable wird durch einen vname bezeichnet. Um eine Variable zu erstellen, deren vname einen . enthält, muss bereits eine Variable vorhanden sein, deren vname aus allem vor dem letzten . besteht.

Diese Funktion gibt es nur in ksh93, nicht in bash. Wenn Ihr Skript sie nutzt, müssen Sie es unter ksh93 ausführen.

Antwort2

Ich denke, der "." in Ihrem Variablennamen bringt Ihren Code durcheinander.

Versuchen Sie, den Punkt in Ihrer Variable zu entfernen, indem Sie sie beispielsweise von option.VARIABLEin umbenennen optionVARIABLE.

verwandte Informationen