Question:
Observing Bash scripts note that variables can be created in the following ways:
script1.sh
:
variable1=Hola
export variable2="Hola tambien"
I wanted to know more about the difference of these 2 ways to declare the variables. And from what I understood, export
would serve to make global variables.
But on exceeding the script and trying to print the global variable2
, I get the same result as my script's local variable variable1
$ ./script1.sh
$ echo $variable1
$
$ echo $variable2
Making use of the source
command or using .
and performing the same previous procedure, I get the printing of the 2 variables as a result.
$ source script1.sh
$ echo $variable1
Hola
$ echo $variable2
Hola tambien
At this point I understood that the purpose of export
is not to declare global variables.
What is the purpose of export?
Answer:
export
makes the variable available to running shell threads . It puts the variable in the environment so that other processes can make use of them.
Sometimes it is used to put a configuration path, a password, For example, to indicate that your pager is less
, then you write export PAGER=less
, and every time you use man <programa>
in that session, it will use less
as a pager. It could also be most
, etc.
I give you an example script so you can see what export
does.
#!/bin/bash
export var1="Esta variable es global"
var2="Variable2"
principal() {
bash -c '
echo -e "\nEn la parte principal"
echo "Imprimiendo \$var1: $var1"
echo "Imprimiendo \$var2: $var2"'
}
principal
export var2 # A partir de aquí ya debería aparecer el valor de "var2"
principal
Whose execution gives:
$ ./export
En la parte principal
Imprimiendo $var1: Esta variable es global
Imprimiendo $var2:
En la parte principal
Imprimiendo $var1: Esta variable es global
Imprimiendo $var2: Variable2
I used bash -c 'etc'
to open a thread, and the first time it is executed, it does not show any value of the variable var2
, but after calling export var2
.