Potrzebujesz tylko export
zmiennych, które powinny być „widoczne” przez inne programy, które uruchamiasz w powłoce, podczas gdy te, które są używane tylko w samej powłoce, nie muszą być export
edytowane.
Oto, co mówi strona podręcznika:
The supplied names are marked for automatic export to the environ‐
ment of subsequently executed commands. If the -f option is given,
the names refer to functions. If no names are given, or if the -p
option is supplied, a list of all names that are exported in this
shell is printed. The -n option causes the export property to be
removed from each name. If a variable name is followed by =word,
the value of the variable is set to word. export returns an exit
status of 0 unless an invalid option is encountered, one of the
names is not a valid shell variable name, or -f is supplied with a
name that is not a function.
Można to wykazać za pomocą:
$ MYVAR="value"
$ echo ${MYVAR}
value
$ echo 'echo ${MYVAR}' > echo.sh
$ chmod +x echo.sh
$ ./echo.sh
$ export MYVAR="value-exported"
$ ./echo.sh
value-exported
Wyjaśnienie:
- Najpierw ustawiłem
${MYVAR}
zmienną Shell za pomocą MYVAR="value"
. Używając echo
mogę echo jego wartości, ponieważ echo jest częścią powłoki.
- Potem tworzę
echo.sh
. To mały skrypt, który w zasadzie robi to samo, po prostu echo ${MYVAR}
, ale różnica polega na tym, że będzie działał w innym procesie, ponieważ jest to osobny skrypt.
- Podczas wywoływania
echo.sh
nic nie wyświetla, ponieważ nowy proces nie dziedziczy${MYVAR}
- Następnie eksportuję
${MYVAR}
do mojego środowiska za pomocą export
słowa kluczowego
- Kiedy teraz uruchomię to samo
echo.sh
, wyświetla treść, ${MYVAR}
ponieważ pobiera ją ze środowiska
Aby odpowiedzieć na twoje pytanie:
To zależy od tego, gdzie zmienna będzie używana, niezależnie od tego, czy musisz ją wyeksportować, czy nie.