it-swarm.com.de

Korrigieren Sie die Groß- und Kleinschreibung von Bash- und Shell-Skriptvariablen

Ich stoße auf viele Shell-Skripte mit Variablen in Großbuchstaben, und ich habe immer gedacht, dass dies ein schwerwiegendes Missverständnis darstellt. Ich verstehe, dass mgebungsvariablen) laut Konvention (und vielleicht aus Gründen der Notwendigkeit vor langer Zeit in Großbuchstaben stehen.

Aber in modernen Skriptumgebungen wie Bash habe ich immer die Konvention von Kleinbuchstaben für temporäre Variablen und Großbuchstaben bevorzugt nur für exportierte (d. H. Umgebungs) Variablen. Beispielsweise:

#!/usr/bin/env bash
year=`date +%Y`
echo "It is $year."
export Java_HOME="$HOME/Java"

Das war schon immer meine Einstellung. Gibt es maßgebliche Quellen, die diesem Ansatz entweder zustimmen oder nicht zustimmen, oder handelt es sich lediglich um eine Frage des Stils?

165
JasonSmith

Umgebungsvariablen (PAGER, EDITOR, ...) und interne Shell-Variablen (Shell, BASH_VERSION, ...) werden aktiviert. Alle anderen Variablennamen sollten in Kleinbuchstaben geschrieben werden.

Denken Sie daran, dass bei Variablennamen die Groß- und Kleinschreibung beachtet wird. Diese Konvention vermeidet das versehentliche Überschreiben von Umgebungsvariablen und internen Variablen.

Wenn Sie diese Konvention einhalten, können Sie sicher sein, dass Sie nicht jede Umgebungsvariable kennen müssen, die von UNIX-Tools oder -Shells verwendet wird, um ein Überschreiben zu vermeiden. Wenn es Ihre Variable ist, schreiben Sie sie in Kleinbuchstaben. Wenn Sie es exportieren, schreiben Sie es in Großbuchstaben.

225
lhunath

Konsequent befolgte Namenskonventionen helfen immer weiter. Hier einige hilfreiche Tipps für die Benennung von Shell-Variablen:

  • Verwenden Sie alle Groß- und Kleinschreibung für exportierte Variablen und Konstanten, insbesondere wenn sie für mehrere Skripte oder Prozesse freigegeben sind. Verwenden Sie gegebenenfalls ein gemeinsames Präfix, damit verwandte Variablen auffallen und nicht mit Bash-internen Variablen kollidieren, die alle in Großbuchstaben geschrieben sind.

    Beispiele:

    • Exportierte Variablen mit einem gemeinsamen Präfix: JOB_HOMEJOB_LOGJOB_TEMPJOB_RUN_CONTROL
    • Konstanten: LOG_DEBUGLOG_INFOLOG_ERRORSTATUS_OKSTATUS_ERRORSTATUS_WARNING
  • Verwenden Sie "snake case" ( alle Kleinbuchstaben und Unterstriche ) für alle Variablen, die auf ein einzelnes Skript oder einen Block angewendet werden.

    Beispiele: input_filefirst_valuemax_amountnum_errors

    Mischfall, wenn die lokale Variable in irgendeiner Beziehung zu einer Umgebungsvariablen steht, z. B .: old_IFSold_HOME

  • Verwenden Sie einen führenden Unterstrich für "private" Variablen und Funktionen. Dies ist besonders relevant, wenn Sie jemals eine Shell-Bibliothek schreiben, in der Funktionen innerhalb einer Bibliotheksdatei oder zwischen Dateien Variablen gemeinsam nutzen müssen, ohne jemals mit etwas in Konflikt zu geraten, das im Hauptcode einen ähnlichen Namen trägt.

    Beispiele: _debug_debug_level_current_log_file

  • Vermeiden Sie Kamelkiste . Dies minimiert die Fehler, die durch Rechtschreibfehler verursacht werden. Denken Sie daran, dass Shell-Variablen zwischen Groß- und Kleinschreibung unterscheiden .

    Beispiele: inputArraythisLooksBAD, numRecordsProcessed, veryInconsistent_style


Siehe auch:

19
codeforester

Ich mach was du machst. Ich bezweifle, dass es eine maßgebliche Quelle gibt, aber es scheint ein ziemlich verbreiteter De-facto-Standard zu sein.

6
Draemon

Wenn Shell-Variablen in die Umgebung exportiert werden sollen, ist zu berücksichtigen, dass POSIX (Ausgabe 7, Ausgabe 2018) Definition der Umgebungsvariablen Folgendes angibt:

Umgebungsvariablennamen, die von den Dienstprogrammen im Shell- und Dienstprogramm-Volume von POSIX.1-2017 verwendet werden, bestehen ausschließlich aus Großbuchstaben, Ziffern und dem Unterstrich (_) aus den in Portable Character Set definierten Zeichen und beginnen nicht mit einer Ziffer.

...

Der Namensraum von Umgebungsvariablennamen, die Kleinbuchstaben enthalten, ist für Anwendungen reserviert. Anwendungen können beliebige Umgebungsvariablen mit Namen aus diesem Namensraum definieren, ohne das Verhalten der Standarddienstprogramme zu ändern.

4

Es ist nur eine sehr weit verbreitete Konvention, ich bezweifle, dass es eine "maßgebliche" Quelle dafür gibt.

3
Alnitak

Tatsächlich scheint der Begriff "Umgebungsvariablen" relativ neu zu sein. Kernighan und Pike sprechen in ihrem 1984 erschienenen Klassiker "The UNIX Programming Environment" nur von "Shell-Variablen" - es gibt nicht einmal einen Eintrag für "environment" im Index!

3
anon

ich neige dazu, ALL_CAPS sowohl für Umgebungsvariablen als auch für globale Variablen zu verwenden. Natürlich gibt es in Bash keinen wirklichen Variablenbereich, daher gibt es einen Großteil der Variablen, die als globale Variablen verwendet werden (hauptsächlich Einstellungen und Statusverfolgung), und relativ wenige lokale Variablen (Zähler, Iteratoren, teilweise konstruierte Zeichenfolgen und temporäre Variablen).

1
Javier