Bash tampaknya membedakan antara variabel yang telah diekspor dan yang belum.
contoh:
$ FOO=BAR
$ env | grep FOO
$ set | grep FOO
FOO=BAR
set
melihat variabel tetapi env
tidak.
$ export BAR=FOO
$ env | grep FOO
BAR=FOO
$ set | grep FOO
BAR=FOO
FOO=BAR
set
melihat kedua variabel tetapi env
hanya melihat variabel yang diekspor.
Saya tahu bahwa set
adalah bash bawaan dan env
tidak.
Apa perbedaan antara variabel yang diekspor dan yang tidak?
Jawaban yang Diterima:
Variabel yang diekspor dibawa ke lingkungan perintah yang dijalankan oleh shell yang mengekspornya, sedangkan variabel yang tidak diekspor bersifat lokal untuk pemanggilan shell saat ini. Dari export
halaman manual:
Shell akan memberikan atribut ekspor ke variabel yang sesuai dengan nama yang ditentukan, yang akan menyebabkannya berada di lingkungan perintah yang dieksekusi selanjutnya.
set
menampilkan lingkungan saat ini, yang mencakup variabel lokal yang tidak diekspor. env
digunakan untuk meluncurkan program di lingkungan baru, dan tanpa argumen akan menampilkan seperti apa lingkungan baru itu. Sejak env
sedang menciptakan lingkungan baru, hanya variabel yang diekspor yang dibawa, seperti halnya program apa pun yang diluncurkan dari shell itu. Misalnya, memunculkan cangkang kedua di dalam cangkang pertama (saya menggunakan $$
untuk mewakili prompt di shell bagian dalam):
$ FOO=BAR
$ bash
$$ echo $FOO # Note the empty line
$$ exit
$ export FOO
$ bash
$$ echo $FOO
BAR
$$
Perhatikan bahwa itu adalah variabel yang diekspor, bukan hanya nilainya. Ini berarti bahwa setelah Anda export FOO
, FOO
menjadi variabel global dan muncul di lingkungan berikutnya, bahkan jika diubah nanti:
$ export FOO
$ FOO=BAR
$ bash
$$ echo $FOO
BAR
$$