Esistono convenzioni di denominazione per le variabili negli script di shell?


113

La maggior parte delle lingue ha convenzioni di denominazione per le variabili, lo stile più comune che vedo negli script di shell è MY_VARIABLE=foo. È questa la convenzione o è solo per le variabili globali? Che dire delle variabili locali allo script?


1
L'unico che conosco e che tutti dovrebbero seguire è che tutti i nomi maiuscoli dovrebbero essere riservati alla shell. Non utilizzarli per evitare di sovrascrivere accidentalmente qualcosa di importante come PATHo HOMEo qualsiasi altra cosa la shell potrebbe riservare in futuro.
jw013,

3
In realtà, tutti i nomi in maiuscolo vengono generalmente utilizzati per le variabili di ambiente. Alcune variabili (come PATH) sono interpretate dalla shell, mentre altre (come LANGUAGE o PRINTER) possono essere interpretate da altri programmi, ma non c'è nulla di speciale in esse.
jlp,

'variabili ambientali' è davvero il nome proprio, lo includerò nella mia risposta.
jippie,

Sebbene non autorevole, questa guida di Google ha buoni suggerimenti: google.github.io/styleguide/shell.xml . Suggerisce di attenersi a tutti i limiti solo per costanti e variabili esportate, caso serpente per tutto il resto. Personalmente mi piace la custodia in cammello per i miei globi poiché nessun altro lo consiglia, il che riduce la probabilità di nominare le collisioni. Inoltre mi piace il modo in cui leggono.
File binario

Risposte:


111

Le variabili di ambiente o le variabili della shell introdotte dal sistema operativo o dagli script di avvio della shell, ecc. Di solito sono tutte incluse CAPITALS.

Per evitare che le proprie variabili siano in conflitto con queste variabili, è buona norma utilizzare lower case.


32
lower_casetrattino basso separato o camelCase?
Garrett Hall,

3
@GarrettHall Dipende solo da te. Una volta che prendi un bastoncino con esso. La coerenza è più importante della scelta effettiva.
jw013,

2
questione di gusti? Personalmente mi piace lo stile C camelCaseperché è più corto e non usa il carattere di sottolineatura brutto. Gusto, stile, ...
jippie l'

19
questione di gusti? Personalmente mi piace il carattere di sottolineatura separato, più facile da leggere.
gennaio

4
Per completezza, le variabili di ambiente non sono l'unica categoria di nomi di variabili convenzionalmente tutto maiuscolo shell - questa regola vale anche per builtins (come PWD, PS4o BASH_SOURCE).
Charles Duffy,

62

Sì, ci sono convenzioni di stile di codice completo per bash, inclusi i nomi delle variabili. Ad esempio, ecco la Shell Style Guide di Google .

Come riepilogo specifico dei nomi delle variabili:

Nomi variabili : lettere minuscole, con caratteri di sottolineatura per separare le parole. Ex:my_variable_name

Costanti e nomi delle variabili di ambiente : tutti i caratteri maiuscoli, separati da caratteri di sottolineatura, dichiarati all'inizio del file. Ex:MY_CONSTANT


1
Il link sopra è ora morto, ma credo che questo sia ciò a cui è collegato: google.github.io/styleguide/shell.xml
Sam

1
@Sam, grazie. Sì, quello. È ora che Google smetta di usare googlecode.com lol
Anonsage

1
Non si fa sempre quello che dice Google? ;-)
tim.rohrer

1
Queste convenzioni sono solo Google per i loro progetti open source: sebbene possano essere delle ottime regole, non potrebbero applicarsi a tutti i progetti.
smonff

1

Le sottolineature per separare le parole sembrano essere il modo migliore di procedere.
Ho alcuni motivi per preferire snake_case rispetto a camelCase quando sono libero di scegliere:

  1. Flessibile: è possibile utilizzare maiuscole e minuscole (ad es. MY_CONSTANTE my_variable);
  2. Coerente: le cifre possono essere separate per rendere il numero più leggibile (ad es. 1_000_000_000) E questa funzione è supportata in molti linguaggi di programmazione;
  3. Comune: comune nel punto in cui il regex \wgestisce i caratteri di sottolineatura come caratteri di parole e numeri ( [a-zA-Z0-9_]).
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.