Gibt es Namenskonventionen für Variablen in Shell-Skripten?


113

Die meisten Sprachen haben Namenskonventionen für Variablen, der häufigste Stil, den ich in Shell-Skripten sehe, ist MY_VARIABLE=foo. Ist dies die Konvention oder nur für globale Variablen? Was ist mit Variablen lokal im Skript?


1
Ich weiß nur, dass alle Namen in Großbuchstaben für die Shell reserviert sein sollten. Clobbering Verwenden Sie sie nicht aus Versehen etwas zu vermeiden wichtig wie PATHoder HOMEoder irgendetwas anderes die Schale in Zukunft behalten könnten.
JW013

3
Tatsächlich werden normalerweise alle Namen in Großbuchstaben für Umgebungsvariablen verwendet. Einige Variablen (wie PATH) werden von der Shell interpretiert, während andere (wie LANGUAGE oder PRINTER) von anderen Programmen interpretiert werden können, aber ansonsten sind sie nicht besonders.
jlp

'Umgebungsvariablen' ist in der Tat der richtige Name, ich werde ihn in meine Antwort aufnehmen.
jippie

Obwohl dieser Google-Leitfaden nicht maßgeblich ist, enthält er gute Vorschläge: google.github.io/styleguide/shell.xml . Es wird empfohlen, sich nur für Konstanten und exportierte Variablen an die Groß- und Kleinschreibung zu halten, für alles andere die Groß- und Kleinschreibung. Persönlich mag ich Kameltaschen für meine Globals, da es sonst niemand empfiehlt, was die Wahrscheinlichkeit verringert, Kollisionen zu benennen. Außerdem gefällt mir die Art und Weise, wie sie lesen.
Binary Phile

Antworten:


111

Umgebungsvariablen oder Shell-Variablen, die vom Betriebssystem oder von Shell-Startskripten usw. eingeführt werden, sind normalerweise alle in CAPITALS.

Es wird empfohlen, eigene Variablen zu verwenden, um Konflikte mit diesen Variablen zu vermeiden lower case.


32
lower_caseunterstrich getrennt oder camelCase?
Garrett Hall,

3
@ GarrettHall Das liegt ganz bei Ihnen. Sobald Sie einen Stock damit auswählen. Konsistenz ist wichtiger als die tatsächliche Wahl.
JW013

2
Geschmackssache? Ich persönlich mag den C-Style, camelCaseweil er kürzer ist und den hässlichen Unterstrich nicht verwendet. Geschmack, Stil, ...
jippie

19
Geschmackssache? Ich persönlich mag den Unterstrich getrennt, leichter zu lesen.
Janos

4
Für Vollständigkeit, Umgebungsvariablen Variablennamen nicht die einzige Kategorie von konventionell all-Groß Shell ist - diese Regel gilt auch für builtins (wie PWD, PS4, oder BASH_SOURCE).
Charles Duffy

62

Ja, es gibt vollständige Code-Stilkonventionen für Bash, einschließlich Variablennamen. Hier ist zum Beispiel der Shell Style Guide von Google .

Als Zusammenfassung für die Variablennamen speziell:

Variablennamen : Kleinbuchstaben mit Unterstrichen, um Wörter zu trennen. Ex:my_variable_name

Namen von Konstanten und Umgebungsvariablen : Alle mit Unterstrichen getrennten Großbuchstaben werden am Anfang der Datei deklariert. Ex:MY_CONSTANT


1
Der obige Link ist jetzt tot, aber ich glaube, das ist, was es verlinkt ist: google.github.io/styleguide/shell.xml
Sam

1
@ Sam, danke. Ja, das ist es. Es ist an der Zeit, dass Google die Verwendung von googlecode.com beendet. Lol
Anonsage

1
Tun Sie immer das, was Google sagt? ;-)
tim.rohrer 20.08.16

1
Diese Konventionen sind nur Google-Konventionen für ihre eigenen Open-Source-Projekte: Obwohl es sich um sehr gute Regeln handeln könnte, könnte sie nicht für alle Projekte gelten.
Smonff

1

Das Unterstreichen von Wörtern scheint der beste Weg zu sein.
Ich habe ein paar Gründe, snake_case gegenüber camelCase vorzuziehen, wenn ich die Wahl habe:

  1. Flexibel: Sie können Groß- und Kleinschreibung verwenden (z. B. MY_CONSTANTund my_variable).
  2. Konsistent: Die Ziffern können getrennt werden, um die Lesbarkeit der Nummer zu verbessern (z. B. 1_000_000_000). Diese Funktion wird in vielen Programmiersprachen unterstützt.
  3. Common: Common an dem Punkt, an dem der Regex \wUnterstriche wie Wortzeichen und Zahlen ( [a-zA-Z0-9_]) behandelt.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.