Noob bash kerdes - export VAR="x" vs VAR="x"

 ( carlcolt | 2018. május 22., kedd - 14:39 )

Van-e valami kulonbseg a

$ VMI="xx"

es a

$ export VMI="xx"

parancs/szintaxis viselkedese kozott?

Ha igen, mi az? Van olyan eset, ahol a sima valtozonev es az export elotagos valtozonev assign-olas maskepp viselkedik? A "man/tldr export" page-ek peldai mukodtek "export" kulcsszo nelkul is. Megis olyan sok 3rd party bash script ragaszkodik az "export" kulcsszohoz. Miert?

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Az export a subprocess-nek is lattatja a variablet,mig a masik csak az adott processben el.

Példa:

#!/bin/bash
#sc1.sh
t=100
export et=900
echo $$: $t $et 
./sc2.sh

#!/bin/bash
#sc2.sh
echo $$: $t $et

--
eutlantis

Koszi, ez megadta a megfelelo peldat

export nélkül kizárólag a shell-en belül látszik a változó és az értéke. export hatására minden ebből a shellből később indított alkalmazás is tud a változóról - ennek hatására aztán vagy történik valami, vagy nem.

$ POSIXLY_CORRECT=1
$ df /
$ export POSIXLY_CORRECT
$ df /
$ unset POSIXLY_CORRECT

=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?

Az export annyit tesz, hogy exportálhatóvá tesz egy változót a shellen belül.
Ami azt jelenti, hogy amikor a shell elindít egy processzt, akkor a processz környezeti változói közé felveszi ezt a változót is az adott értékkel.

A szabványból idézve:
"The shell shall give the export attribute to the variables corresponding to the specified names, which shall cause them to be in the environment of subsequently executed commands."
http://pubs.opengroup.org/onlinepubs/009696799/utilities/export.html

Egyreszt +1 az eddigiekre. Par kiegeszites:

Mondjuk amikor a PATH valtozot allitgatod .bashrc-bol, akkor nem az adott scripten beluli erteke a fontos, hanem hogy tovabboroklodjon.

A masik, hogy az export var=x forma basizm, regebbi shelleknel csak a var=x, es kulon export var mukodott. Ezert lathatsz sok helyen ilyet.

--
Any A.I. smart enough to pass a Turing test is smart enough to know to fail it. -Ian McDonald

Nem igazan bashism, a POSIX szabvanyban benne van az export name=value típusú használa az exportnak.
"If the name of a variable is followed by = word, then the value of that variable shall be set to word."
http://pubs.opengroup.org/onlinepubs/009696799/utilities/export.html

Ok, akkor nem bash-specifikus dolog, rosszul emlekeztem. Mindenesetre regen volt, amin nem ment maskepp, azert latsz nehany scriptben ilyet.

--
Any A.I. smart enough to pass a Turing test is smart enough to know to fail it. -Ian McDonald

Bár nem ez a kérdés, de a
set -a
vagy
set -o allexport
feleslegessé teszi az export használatát.