Perbedaan antara "a = b" dan "ekspor a = b" dalam bash


50

Apa perbedaan antara:

a=b

dan

export a=b

Di bash?

Saya mengerti bahwa keduanya mendefinisikan variabel lingkungan, tetapi saya tidak sepenuhnya memahami perbedaannya.


Bisakah seseorang mengedit ini? Ini sama sekali tidak terkait dengan Linux, tetapi hanya bergantung pada shell yang Anda gunakan. Saya kira itu bash di sini, yang juga berfungsi pada Windows.
innaM

Saya berdiri dikoreksi.
Adam Matan

Jawaban:


54

export menyebarkan variabel ke subproses.

Misalnya, jika Anda melakukannya

FOO=bar

maka subproses yang memeriksa FOO tidak akan menemukan variabel sedangkan

export FOO=bar

akan memungkinkan subproses untuk menemukannya.

Tetapi jika FOOtelah sudah didefinisikan sebagai variabel lingkungan, maka FOO=barakan mengubah nilai dari variabel lingkungan.

Sebagai contoh:

FOO=one     # Not an environment variable
export FOO  # Now FOO is an environment variable
FOO=two     # Update the environment variable, so sub processes will see $FOO = "two"

Kerang yang lebih tua tidak mendukung export FOO=barsintaksis; kamu harus menulis FOO=bar; export FOO.


33
Sebenarnya, jika Anda tidak menggunakan " export", Anda tidak mendefinisikan variabel lingkungan, tetapi hanya variabel shell. Variabel Shell hanya tersedia untuk proses shell; variabel lingkungan tersedia untuk setiap proses selanjutnya, bukan hanya shell. Selain itu, subkulit adalah perintah yang terdapat di dalam tanda kurung, yang memang memiliki akses ke variabel shell, sedangkan yang Anda bicarakan adalah proses anak yang merupakan shell.
wfaulk

Di mana ini disimpan?
HDave

28

Jika Anda tidak menggunakan export, Anda tidak mendefinisikan variabel lingkungan; hanya variabel shell.

Variabel Shell hanya tersedia untuk proses shell; variabel lingkungan tersedia untuk setiap proses selanjutnya, bukan hanya shell.


2

Juga, jika Anda ingin agar variabel tersedia untuk shell panggilan tanpa menggunakan ekspor, Anda dapat melakukan ini:

File a.ksh adalah -

#!/bin/ksh
FOO=bar

Pada prompt, jalankan ini

> . a.ksh

Ini akan menjalankan perintah di dalam shell yang sama dan $ FOO akan tersedia.

Sedangkan,

> a.ksh

Akan membuat $ FOO hanya tersedia dalam a.ksh, setelah panggilan ke a.ksh itu tidak akan ada.


1
Benar. Perhatikan bahwa "." hanyalah jalan pintas untuk "sumber", yang terkadang digunakan dalam skrip untuk keterbacaan yang lebih baik. Lihat "bantuan." atau "sumber bantuan" untuk detail.
sleske

1

Selain apa yang sudah dijawab, kedua pernyataan ini tidak harus mendefinisikan (yaitu membuat vs set) variabel lingkungan sebagai "a" mungkin sudah ada sebagai variabel shell atau lingkungan.

Dalam kasus yang terakhir, kedua pernyataan tersebut sangat setara.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.