Myślę, że wychodzisz z tła systemu Windows. Więc zestawię je ze sobą (jestem też trochę nowy w Linuksie). Znalazłem odpowiedź użytkownika na mój komentarz, która była przydatna w rozwiązywaniu problemów.
W systemie Windows zmienna może być trwała lub nie. Termin zmienna środowiskowa obejmuje zmienną ustawioną w powłoce cmd za pomocą polecenia SET, a także wtedy, gdy zmienna jest ustawiana w interfejsie GUI systemu Windows, a zatem jest umieszczana w rejestrze i staje się widoczna w nowych oknach cmd. np. dokumentacja dla polecenia set w systemie Windows https://technet.microsoft.com/en-us/library/bb490998.aspx „Wyświetla, ustawia lub usuwa zmienne środowiskowe. Używane bez parametrów, set wyświetla bieżące ustawienia środowiska”. W Linuksie set nie wyświetla zmiennych środowiskowych, wyświetla zmienne powłoki, których nie wywołuje / nie odwołuje się do zmiennych środowiskowych. Ponadto Linux nie używa set do ustawiania zmiennych (poza parametrami pozycyjnymi i opcjami powłoki, które wyjaśniam na końcu jako uwaga), tylko do ich wyświetlania, a nawet wtedy tylko do wyświetlania zmiennych powłoki. Windows używa set do ustawiania i wyświetlania np. Set a = 5, linux tego nie robi.
W Linuksie myślę, że można by stworzyć skrypt, który ustawia zmienne podczas startu, np. /etc/profile
Lub w /etc/.bashrc
innym przypadku, nie są one trwałe. Są przechowywane w pamięci RAM.
W Linuksie istnieje rozróżnienie między zmiennymi powłoki i zmiennymi środowiskowymi. W systemie Linux zmienne powłoki znajdują się tylko w bieżącej powłoce, a zmienne środowiskowe znajdują się w tej powłoce i we wszystkich powłokach potomnych.
Możesz przeglądać zmienne powłoki za pomocą set
polecenia (choć zauważ, że w przeciwieństwie do systemu Windows, zmienne nie są ustawiane w systemie Linux za pomocą polecenia set).
set -o posix; set
(zrobienie tego set -o posix raz jako pierwsze pomaga nie wyświetlać zbyt wielu niepotrzebnych rzeczy). Więc set
wyświetla zmienne powłoki.
Za pomocą env
polecenia można przeglądać zmienne środowiskowe
zmienne powłoki są ustawiane za pomocą np. just a = 5
zmienne środowiskowe są ustawiane podczas eksportu, eksport również ustawia zmienną powłoki
Tutaj widzisz zmienną powłoki zzz ustawioną na zzz = 5 i widzisz, że jest wyświetlana podczas działania, set
ale nie jest wyświetlana jako zmienna środowiskowa.
Tutaj widzimy zestaw yyy z eksportem, więc jest to zmienna środowiskowa. I zobacz, jak pokazuje się zarówno pod zmiennymi powłoki, jak i zmiennymi środowiskowymi
$ zzz=5
$ set | grep zzz
zzz=5
$ env | grep zzz
$ export yyy=5
$ set | grep yyy
yyy=5
$ env | grep yyy
yyy=5
$
inne przydatne wątki
/unix/176001/how-can-i-list-all-shell-variables
/ubuntu/26318/environment-variable-vs-shell-variable-whats-the-difference
Uwaga - jedną kwestią, która trochę się rozwija i jest nieco poprawiająca to, co napisałem, jest to, że w linux bash, 'set' może być używane do ustawiania "parametrów pozycyjnych" i "opcji / atrybutów powłoki", i technicznie oba to są zmienne, chociaż strony podręcznika mogą ich nie opisywać jako takie. Ale nadal, jak wspomniano, set nie ustawi zmiennych powłoki ani zmiennych środowiskowych). Jeśli to zrobisz set asdf
, ustawia $ 1 na asdf, a jeśli echo $1
widzisz asdf. Jeśli zrobiszset a=5
nie ustawi zmiennej a równej 5. Ustawi parametr pozycyjny $ 1 równy łańcuchowi „a = 5”. Więc jeśli kiedykolwiek widziałeś set a = 5 w Linuksie, to prawdopodobnie błąd, chyba że ktoś faktycznie chciał, aby łańcuch a = 5, w 1 $. Inną rzeczą, którą zestaw linux może ustawić, są opcje / atrybuty powłoki. Jeśli ustawisz -o, zobaczysz ich listę. Możesz na przykład set -o verbose
wyłączyć, aby włączyć szczegółowe informacje (przy okazji domyślnie jest wyłączone, ale to nie ma znaczenia). Możesz też set +o verbose
wyłączyć szczegółowe informacje. System Windows nie ma takiego zastosowania dla swojego polecenia set.