Jawaban:
$BASH
adalah variabel lokal yang hanya valid dalam shell (bash) saat ini.
Variabel lingkungan seperti $SHELL
yang berlaku di seluruh sistem. Di shell Bash saat ini, $BASH
menunjuk ke jalur eksekusi bash , sedangkan $SHELL
menunjuk ke shell didefinisikan sebagai default (yang mungkin memiliki nilai yang sama).
Untuk penjelasan tentang variabel lingkungan, lihat Variabel Lingkungan di Bantuan Ubuntu.
Variabel lingkungan tersedia secara global, dalam sebuah program dan itu adalah program anak. Variabel shell hanya tersedia di shell saat ini. Untuk membuat variabel shell tersedia sebagai variabel lingkungan, gunakan export VARNAME
(tanpa dolar $
).
Contoh untuk klarifikasi:
$ SOME=VAR # define shell variable $SOME
$ echo $SOME
VAR
$ env | grep SOME # note: no output
$ export SOME # turn $SOME into an environment variable
$ env | grep SOME
SOME=VAR
Cara lain untuk mendefinisikan variabel lingkungan:
$ export ANOTHER=VALUE
$ echo $ANOTHER
VALUE
$ env | grep ANOTHER
ANOTHER=VALUE
export
tidak perlu menetapkan variabel lingkungan. stackoverflow.com/questions/7411455/…
export
tidak menetapkan variabel lingkungan untuk proses anak. Posting yang Anda tautkan tidak bertentangan dengan jawaban ini, dapatkah Anda menjelaskan mengapa Anda berpikir itu salah?
export
benar-benar menetapkan variabel lingkungan
Ada perbedaan. Variabel Shell dan Variabel Lingkungan akan menjelaskan dengan lebih baik yang saya bisa, tetapi berikut adalah kutipan darinya:
Jika perubahan dilakukan ke variabel shell, itu harus secara eksplisit "diekspor" ke variabel lingkungan yang sesuai agar setiap subproses bercabang untuk melihat perubahan. Ingat bahwa variabel shell adalah lokal ke shell di mana mereka didefinisikan.
Variabel Shell: Jangka Pendek, Diterapkan hanya untuk instance shell saat ini, Tidak berlaku untuk seluruh sistem
Variabel Lingkungan: Penggunaan Jangka Panjang, Sistem Valid Lebar, Diizinkan Secara Global
Dengan konvensi Shell Variable memiliki nama mereka sebagai huruf kecil sementara Envn. Variabel ditulis sebagai huruf besar
Untuk menjawab pertanyaan ini pertama-tama cobalah untuk memahami ruang lingkup variabel.
Ketika Anda membuat variabel baru seperti SOME_ENV_VARIABLE="testing.txt"
itu berada di SHELL scope
, itu berarti itu dapat diakses oleh contoh shell di mana pengguna login. Ketika instance berubah misalnya Anda membuka terminal baru atau Anda mengganti shell (misalnya Anda beralih ke csh
) Anda tidak dapat mengakses variabel itu.
Ketika Anda mengekspor variabel seperti export SOME_ENV_VARIABLE
variabel itu sekarang tersedia dalam lingkup lingkungan, itu berarti dalam hal itu jika Anda mengganti shell Anda masih dapat mengakses variabel itu. Mari kita coba mengerti dengan contoh berikut:
[vishrant@localhost]$ SOME_ENV_VARIABLE="testing.txt" #creating variable in bash shell
[vishrant@localhost]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost]$ export SOME_ENV_VARIABLE #variable now available with environment
[vishrant@localhost]$ env | grep SOME_ENV_VARIABLE
SOME_ENV_VARIABLE=testing.txt
[vishrant@localhost]$ csh #changing shell
[vishrant@localhost ~/shell_scripting]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost ~/shell_scripting]$ exit
exit #returned to parent shell
[vishrant@localhost]$ SOME_SHELL_VARIABLE="hello.txt"
[vishrant@localhost]$ csh
[vishrant@localhost ~/shell_scripting]$ echo $SOME_SHELL_VARIABLE
SOME_SHELL_VARIABLE: Undefined variable.
Analogi: mari kita asumsikan Anda memiliki apartemen dua kamar tidur dan Anda membaginya dengan teman sekamar lain. Area umum dapat diakses oleh siapa saja tetapi tidak di kamar tidur Anda, variabel lingkungan seperti area umum dan variabel shell seperti kamar tidur, jika Anda ingin sesuatu di area umum dapat diakses oleh siapa saja tetapi jika Anda menyimpannya di kamar tidur Anda hanya dapat dapat diakses oleh Anda.
Ingat jika membuka terminal baru Anda tidak akan dapat mengakses salah satu variabel karena Anda mengubah contoh itu . Untuk itu Anda harus menambahkan variabel Anda di salah satu .profile
atau .bashrc
(jika Anda menggunakan bash).