Det finns två typer av variabler i skalet i Linux och andra UNIX-system. Dessa är globala – även kallat miljövariabler – samt lokala variabler. Skillnaden är inte helt uppenbar vid en första anblick. Som exempel i denna artikel kommer jag att använda skalet Bash.

Vanliga lokala variabler sätts såhär:

$> MINVAR=Jack-Benny

För att skriva ut värdet kan vi använda echo.

$> echo $MINVAR
Jack-Benny

Men eftersom variabeln är lokal är den bara tillgänglig i det egna skalet. Inga barnprocesser eller nya skal som startas från detta skalet kommer kunna se variabeln.

$> bash
$> echo $MINVAR

$> exit
exit
$> echo $MINVAR
Jack-Benny

Detsamma gäller för vanliga program som startas från skalet, det vill säga alla barnprocesser. Vi testar med ett litet C-program som vi döper till read-var.c.

 #include <stdio.h>
 #include <stdlib.h>

 int main(void)
 {
     printf("MINVAR: %s\n", getenv("MINVAR"));
     return 0;
 }
 

Vi kompilerar och kör programmet från skalet där vi skapat den lokala variabeln MINVAR.

$> gcc -Wall -pedantic -std=c89 read-var.c -o read-var
$> ./read-var 
MINVAR: (null)

Programmet kan således inte se den lokala variabeln MINVAR.

Men om vi istället gör om MINVAR till global kommer både nya skal och program att kunna se den. Detta gör vi med export.

$> export MINVAR
$> bash
$> echo $MINVAR
Jack-Benny
$> exit
exit
$> ./read-var 
MINVAR: Jack-Benny

Det går även att skapa globala variabler direkt med export. Syntax är då:

export MINVAR=Jack-Benny

Nyhetsbrev
Nyhetsuppdateringar från tidningen direkt till din inkorg, helt kostnadsfritt. Avsluta när du vill.

Kommentarer

Kommentarsfältet är modererat. Det innebär att alla kommentarer granskas av ansvarig utgivare före publicering.

Du väljer själv om du vill ange ditt riktiga namn, en pseudonym eller vara helt anonym. Ingen registrering behövs.