Jawaban:
Untuk kerang yang kompatibel dengan POSIX (termasuk Bash), standar tersebut mengatakan:
2.5.3 Variabel Shell Variabel
harus diinisialisasi dari lingkungan [...] Jika suatu variabel diinisialisasi dari lingkungan, ia harus ditandai untuk segera diekspor; lihat khusus ekspor built-in. Variabel baru dapat didefinisikan dan diinisialisasi dengan penugasan variabel, [dll]
Dan tentang export
:
export name[=word]...
Shell harus memberikan atribut ekspor ke variabel yang sesuai dengan nama yang ditentukan, yang akan menyebabkan mereka berada di lingkungan perintah yang dieksekusi selanjutnya.
Jadi dari sudut pandang shell, hanya ada variabel. Beberapa dari mereka mungkin berasal dari lingkungan ketika shell dimulai, dan beberapa dari mereka mungkin diekspor ke lingkungan proses shell dimulai.
("Lingkungan" sebenarnya hanyalah sekelompok string yang diteruskan ke proses ketika dimulai. Ketika proses berjalan, ia dapat melakukan apa pun yang disukainya, gunakan, abaikan, timpa. Dan proses apa yang diteruskan. ketika memulai proses lain bisa menjadi hal lain, meskipun tentu saja itu biasa untuk meneruskan semua variabel lingkungan lagi.)
Jika Anda menggunakan beberapa shell non-POSIX, seperti csh
, masalahnya mungkin berbeda:
$ csh
% echo $foo
foo: Undefined variable.
% setenv foo bar
% echo $foo
bar
% set foo=asdf
% echo $foo
asdf
% env |grep foo
foo=bar
% exit
Ini adalah variabel satu dan sama. Dalam shell, berbeda dengan sebagian besar bahasa pemrograman lain, variabel lingkungan dan variabel shell berbagi ruang nama yang sama. Dalam shell, variabel lingkungan adalah variabel shell yang telah diekspor bersama export
.
Lihat, misalnya, jawaban saya untuk pertanyaan Anda sebelumnya " Apa perbedaan penggunaan antara variabel shell dan variabel lingkungan? "
Variabel Shell hanya dapat digunakan untuk shell saat ini, tidak dapat digunakan di seluruh sistem. Di sisi lain Variabel Lingkungan dapat digunakan System Wide. Sesuai Konvensi Shell Variabel ditulis sebagai huruf kecil sedangkan Variabel Lingkungan ditulis sebagai huruf besar. Anda dapat membuat variabel shell berfungsi sebagai variabel lingkungan, Anda hanya perlu mengekspornya.