Saya membaca di sini bahwa tujuan dari export
suatu shell adalah untuk membuat variabel tersedia untuk sub-proses yang dimulai dari shell.
Namun, saya juga membaca di sini dan di sini bahwa "Proses mewarisi lingkungan mereka dari orang tua mereka (proses yang memulai mereka)."
Jika ini masalahnya, mengapa kita perlu export
? Apa yang saya lewatkan?
Apakah variabel shell bukan bagian dari lingkungan secara default? Apa bedanya?
sumber
set -k
begitu yang dapat digunakancmd ENVVAR=value
di tempatENVVAR=value cmd
, yang tidak akan bekerja dalam contoh Anda kecualiset -k
dijalankan sebelum memohonf
. Juga, tidak banyak shell yang mendukungnya saat ini dan hanya untuk kompatibilitas dengan shell Bourne. Dalam shell Bourne (atau Korn), itu tidak akan berfungsi untuk fungsi. Dan karena itu mempengaruhi penguraian shell, itu harus berlaku pada saat shell membaca kode yang menggunakannya di sana.set -a
Ada perbedaan antara variabel shell dan variabel lingkungan. Jika Anda mendefinisikan variabel shell tanpa
export
memasukkannya, itu tidak ditambahkan ke lingkungan proses dan dengan demikian tidak diwariskan kepada anak-anaknya.Menggunakan
export
Anda memberi tahu shell untuk menambahkan variabel shell ke lingkungan. Anda dapat menguji ini menggunakanprintenv
(yang hanya mencetak lingkungannyastdout
, karena ini adalah proses anak yang Anda lihat efek dariexport
variabel):sumber
Suatu variabel, setelah diekspor, adalah bagian dari lingkungan.
PATH
diekspor dalam shell itu sendiri, sementara variabel khusus dapat diekspor sesuai kebutuhan. Menggunakan beberapa kode pengaturan:Membandingkan
Dengan
Karena
foo
tidak diekspor oleh shell, dantest2.sh
tidak pernah mengekspornya, itu bukan bagian dari lingkungansubshell.sh
dalam jangka terakhir.sumber