Jak rozbroić zmienną w wierszu poleceń?

80

Próbowałem wykonać następujące polecenie, aby ustawić serwer proxy yaourt:

export ALL_PROXY=http://proxy.example.com:8080

Pytanie brzmi: jak wyłączyć proxy yaourt? Ogólnie, jak mogę rozbroić wartość zmiennej w bieżącej powłoce?

Hamed Kamrava
źródło
7
Spróbujunset ALL_PROXY
coffeMug
@coffeMug może również zrobić z tego odpowiedź, możesz również rozważyć kradzież niektórych informacji stąd: stackoverflow.com/a/12263914/1081936
terdon
oprócz zaakceptowanej odpowiedzi, jeśli często uruchamiane jest polecenie, które używa zmiennej środowiskowej, której wolałbyś nie ustawiać lub zmieniać przez resztę sesji powłoki, możesz uruchomić ją w następujący sposób: $ ALL_PROXY=http://proxy.example.com:8080 yaourtustawi envvar tylko dla polecenie uruchomienia. FOO=bar BAZ=batPrzed uruchomieniem polecenia możesz wstawić tyle zmiennych, ile chcesz.
brak

Odpowiedzi:

112

Aby usunąć zmienną środowiskową, uruchom

unset ALL_PROXY

Zauważ, że zmienna środowiskowa działa tylko w programie i programie, który uruchamia. Jeśli ustawisz zmienną środowiskową w jednym oknie powłoki, nie wpłynie to na inne okna powłoki.

Jeśli dodałeś export ALL_PROXY=…do pliku inicjującego, usuń go stamtąd.

Możesz uruchomić exportbez argumentów, aby zobaczyć, jakie zmienne środowiskowe są ustawione w bieżącej powłoce.

Pamiętaj, że aby udostępnić zmienną powłoki programom uruchamianym przez tę powłokę, musisz ją wyeksportować, uruchamiając ją export VARpo przypisaniu VAR=VALUElub łącząc dwa ( export VAR=VALUE).

Gilles
źródło
19

Aby rozbroić zmienną powiązaną w bash, użyj unset VARIABLE( unset ALL_PROXYw twoim przypadku). To polecenie faktycznie usuwa zmienną. Możesz także ustawić wartość zmiennej, która ma być pusta

VARIABLE=

lub

VARIABLE=""

Różnica polega na tym, że dwa ostatnie polecenia nie usuwają zmiennej. Różnicę można zobaczyć, używając -uflagi z, setaby zmusić ją do traktowania nieuzbrojonych zmiennych jako błędu podczas podstawiania:

/home/user1> var=""
/home/user1> echo $var

/home/user1> set -u
/home/user1> echo $var

/home/user1> unset var
/home/user1> echo $var
-bash: var: unbound variable

W powyższym przykładzie bash narzeka, że ​​nie varma związku (po rozbrojeniu jego wartości), co jest oczekiwanym błędem (zauważ, że nie dzieje się to w drugim poleceniu echa, co oznacza, że varma wartość, która jest emptylub null).

kubek kawy
źródło
co jeśli mam zmienną w pliku skryptu powłoki i źródło tego pliku, to jak mam to rozbroić?
Abhinav
Wykorzystanie @Abhinav unsetw skrypcie. To samo dotyczy.
coffeMug