Natrafiam na wiele skryptów powłoki ze zmiennymi we wszystkich wielkich literach i zawsze myślałem, że istnieje poważne nieporozumienie z tym. Rozumiem, że zgodnie z konwencją (a być może z konieczności dawno temu) zmienne środowiskowe są pisane wielkimi literami.
Ale w nowoczesnych środowiskach skryptowych, takich jak Bash, zawsze wolałem konwencję nazw małych liter dla zmiennych tymczasowych i wielkich liter tylko dla eksportowanych zmiennych (tj. Środowiskowych) . Na przykład:
#!/usr/bin/env bash
year=`date +%Y`
echo "It is $year."
export JAVA_HOME="$HOME/java"
To zawsze było moje zdanie na ten temat. Czy są jakieś wiarygodne źródła, które zgadzają się lub nie zgadzają z tym podejściem, czy jest to wyłącznie kwestia stylu?
źródło
USER="username"
w skrypcie bash automatyzującym niektóre zdalne polecenia za pomocą ssh zamiastuser="username"
. Ugh! Cieszę się, że teraz wiem!Wszelkie konsekwentnie przestrzegane konwencje nazewnictwa zawsze pomogą. Oto kilka pomocnych wskazówek dotyczących nazewnictwa zmiennych powłoki:
Użyj wszystkich wielkich liter i znaków podkreślenia dla eksportowanych zmiennych i stałych, zwłaszcza gdy są one współużytkowane przez wiele skryptów lub procesów. W stosownych przypadkach używaj wspólnego przedrostka, aby pokrewne zmienne wyróżniały się i nie kolidowały ze zmiennymi wewnętrznymi Bash, które są dużymi literami.
Przykłady:
JOB_HOME
JOB_LOG
JOB_TEMP
JOB_RUN_CONTROL
LOG_DEBUG
LOG_INFO
LOG_ERROR
STATUS_OK
STATUS_ERROR
STATUS_WARNING
Użyj „węża” ( wszystkie małe i podkreślenia ) dla wszystkich zmiennych, których zakres obejmuje pojedynczy skrypt lub blok.
Przykłady:
input_file
first_value
max_amount
num_errors
Użyj zmiennej mieszanej, gdy zmienna lokalna ma jakiś związek ze zmienną środowiskową, na przykład:
old_IFS
old_HOME
Użyj wiodącego podkreślenia dla „prywatnych” zmiennych i funkcji. Jest to szczególnie istotne, jeśli kiedykolwiek napiszesz bibliotekę powłoki, w której funkcje w pliku biblioteki lub między plikami muszą współdzielić zmienne, bez kolizji z czymkolwiek, co mogłoby być podobnie nazwane w głównym kodzie.
Przykłady:
_debug
_debug_level
_current_log_file
Unikaj futerału wielbłąda . Pozwoli to zminimalizować błędy spowodowane literówkami. Pamiętaj, że w zmiennych powłoki rozróżniana jest wielkość liter .
Przykłady:
inputArray
thisLooksBAD
,numRecordsProcessed
,veryInconsistent_style
Zobacz też:
źródło
Jeśli zmienne powłoki mają zostać wyeksportowane do środowiska, warto wziąć pod uwagę, że POSIX (wydanie 7, wydanie 2018) Definicja zmiennej środowiskowej określa:
...
źródło
Robię to co ty. Wątpię, by istniało wiarygodne źródło, ale wydaje się ono dość powszechnym de facto standardem.
źródło
cat /tmp/location.txt
W rzeczywistości termin „zmienne środowiskowe” wydaje się mieć dość nowy termin. Kernighan i Pike w swojej klasycznej książce „The UNIX Programming Environment”, wydanej w 1984 r., Mówią tylko o „zmiennych powłoki” - w indeksie nie ma nawet hasła „środowisko”!
źródło
Jest to po prostu bardzo szeroko stosowana konwencja, wątpię, by było dla niej „wiarygodne” źródło.
źródło
Zwykle używam ALL_CAPS zarówno dla zmiennych środowiskowych, jak i globalnych. oczywiście w Bash nie ma rzeczywistego zakresu zmiennych, więc jest duża część zmiennych wykorzystywanych jako globale (głównie ustawienia i śledzenie stanu) oraz stosunkowo niewiele „locals” (liczniki, iteratory, częściowo skonstruowane łańcuchy i tymczasowe)
źródło