Bash tampaknya membedakan antara variabel yang telah diekspor dan yang tidak.
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 itu set
bash builtin dan env
tidak.
Apa perbedaan antara variabel yang diekspor dan yang tidak?
shell
environment-variables
lesmana
sumber
sumber
Jawaban:
Variabel yang diekspor dibawa ke lingkungan perintah yang dijalankan oleh shell yang mengekspornya, sementara variabel yang tidak diekspor adalah lokal untuk permintaan shell saat ini. Dari
export
halaman manual:set
menampilkan lingkungan saat ini, yang mencakup variabel lokal yang tidak diekspor.env
digunakan untuk meluncurkan program di lingkungan baru, dan tanpa argumen akan menghasilkan seperti apa lingkungan baru itu. Karenaenv
menciptakan lingkungan baru, hanya variabel yang diekspor yang dimasukkan, seperti halnya untuk setiap program yang diluncurkan dari shell itu. Misalnya, memunculkan shell kedua di dalam shell pertama (saya dulu$$
mewakili prompt di shell bagian dalam):Perhatikan bahwa itu adalah variabel yang diekspor, bukan hanya nilainya. Ini berarti bahwa sekali Anda
export FOO
,FOO
menjadi variabel global dan muncul di lingkungan berikutnya, bahkan jika diubah kemudian:sumber
locale
shell saat ini tidak menampilkan pembaruan?