Nylig la jeg merke til at vi har 3 muligheter for å sette miljøvariabler:
-  export envVar1=1
-  setenv envVar2=2
-  env envVAr3=3
Hvis det er andre måter, kan du opplyse oss.
Når skal jeg foretrekke hverandre? Vennligst foreslå retningslinjer.
Når det gjelder shell-kompatibilitet, som er den mest ekspansive (dekker flere skalldialekter)?
 Jeg har allerede lagt merke til dette  svar  men jeg ønsker å utvide spørsmålet med env og retningslinjene for brukspreferanser. 
Svar
 export VARIABLE_NAME="some value" er måten å sette en miljøvariabel i et POSIX-kompatibelt skall (sh, dash, bash, ksh osv .; også zsh). Hvis variabelen allerede har en verdi, kan du bruke export VARIABLE_NAME for å gjøre den til en miljøvariabel uten å endre verdien. 
 Pre-POSIX  Bourne-skjell  støttet ikke dette, og det er grunnen til at du ser skript som unngår export VARIABLE_NAME="some value" og bruker VARIABLE_NAME="some value"; export VARIABLE_NAME i stedet. Men pre-POSIX Bourne-skall er ekstremt sjeldne i våre dager. 
 setenv VARIABLE_NAME="some value" er csh-syntaksen for å sette en miljøvariabel. setenv eksisterer ikke i sh, og csh brukes ekstremt sjelden i skript og har blitt overgått av bash for interaktiv bruk de siste 20 årene (og zsh enda lenger), så du kan glemme det med mindre du støter på den. 
 env -kommandoen er svært sjelden nyttig, bortsett fra i  shebang-linjer . Når den påkalles uten argumenter, viser den miljøet, men export gjør det bedre (sortert og ofte sitert til disambigua te nye linjer i verdier fra nye linjer som skiller verdier). Når den påkalles med argumenter, kjører den en kommando med ekstra miljøvariabler, men den samme kommandoen uten env fungerer også (VAR=value mycommand kjører mycommand med VAR satt til value, akkurat som env VAR=value mycommand). Årsaken til at env er nyttig i shebang-linjen, er at den utfører PATH oppslag, og det skjer å ikke gjøre noe annet når det påkalles med en kommando Navn. env -kommandoen kan være nyttig å kjøre en kommando med bare noen få miljøvariabler med -i, eller uten parametere for å vise miljøet inkludert variabler med ugyldige navn som skallet ikke importerer. 
Svar
 Angi en variabel som VAR="asdf" etterlater miljøet umodifisert, noe som betyr at programmene du starter i samme økt, ikke vet noe om VAR og ikke får tilgang til det. Du vil ha denne oppførselen når du skriver skallskript . 
 export, derimot, er en bash-innebygd som endrer miljøet, og dermed gjør den eksporterte variabelen synlig for barneprosesser som ble skapt i den nåværende økten. kan oppnå det samme ved å kjøre VAR="asdf" %program_name%. 
 env er ikke et innebygd program, men et program i seg selv. overflaten fungerer den akkurat som når du VAR="asdf" %program_name%, men på lavere nivå blir ting litt mer kompliserte. Først blir env lansert. Det endrer miljø, og utfører deretter kommandoen med gitte argumenter. Den samme oppførselen kan du oppnå i din egen kode ved å bruke  exec (3)  systemanrop. 
 setenv er bare export i csh-familie-skjell, som angitt i svaret ditt. 
Kommentarer
Svar
Det er flere spørsmål med svar som svarer på dette:
- 
Forskjell mellom skallvariabler som eksporteres og de som ikke er i bash 
- 
Hva er forskjellen i bruk mellom skallvariabler og miljøvariabler? 
(etc.)
VAR=asdfmiljøet hvisVARallerede var i miljøet. (Dette var ikke ' t sant i det opprinnelige Bourne-skallet.)