Variabel shell
Variabel Shell adalah variabel yang ruang lingkupnya dalam sesi shell saat ini, misalnya dalam sesi shell interaktif atau skrip.
Anda dapat membuat variabel shell dengan menetapkan nilai ke nama yang tidak digunakan:
var="hello"
Penggunaan variabel shell adalah untuk melacak data di sesi saat ini. Variabel Shell biasanya memiliki nama dengan huruf kecil.
Variabel lingkungan
Variabel lingkungan adalah variabel shell yang telah diekspor. Ini berarti bahwa itu akan terlihat sebagai variabel, tidak hanya di sesi shell yang membuatnya, tetapi juga untuk setiap proses (bukan hanya shell) yang dimulai dari sesi itu.
VAR="hello" # shell variable created
export VAR # variable now part of the environment
atau
export VAR="hello"
Setelah variabel shell telah diekspor, ia tetap diekspor sampai tidak disetel, atau sampai "properti ekspor" dihapus (dengan export -nin bash), jadi biasanya tidak perlu untuk mengekspornya kembali. Membatalkan pengaturan variabel dengan unsetmenghapusnya (tidak peduli apakah itu variabel lingkungan atau tidak).
Array dan hash asosiatif dalam bash dan shell lain mungkin tidak diekspor untuk menjadi variabel lingkungan. Variabel lingkungan harus berupa variabel sederhana yang nilainya berupa string, dan mereka sering memiliki nama yang terdiri dari huruf besar.
Penggunaan variabel lingkungan adalah untuk melacak data dalam sesi shell saat ini, tetapi juga untuk memungkinkan setiap proses yang dimulai untuk mengambil bagian dari data itu. Kasus khas ini adalahPATH variabel lingkungan, yang dapat diatur dalam shell dan kemudian digunakan oleh program apa pun yang ingin memulai program tanpa menentukan path lengkap ke mereka.
Pengumpulan variabel lingkungan dalam suatu proses sering disebut sebagai "lingkungan proses". Setiap proses memiliki lingkungannya sendiri.
Variabel lingkungan hanya dapat "diteruskan", yaitu proses anak tidak pernah dapat mengubah variabel lingkungan dalam proses induknya, dan selain menyiapkan lingkungan untuk proses anak setelah memulainya, proses induk mungkin tidak mengubah lingkungan yang ada dari suatu proses anak.
Variabel lingkungan dapat didaftar dengan env(tanpa argumen). Selain itu, mereka muncul sama dengan variabel shell yang tidak diekspor dalam sesi shell. Ini sedikit istimewa untuk shell karena kebanyakan bahasa pemrograman lain biasanya tidak mencampurkan variabel "biasa" dengan variabel lingkungan (lihat di bawah).
env dapat juga digunakan untuk mengatur nilai satu atau beberapa variabel lingkungan di lingkungan suatu proses tanpa mengaturnya di sesi saat ini:
env CC=clang CXX=clang++ make
Ini dimulai makedengan variabel lingkungan CCdiatur ke nilai clangdan CXXdiatur ke clang++.
Ini juga dapat digunakan untuk membersihkan lingkungan untuk suatu proses:
env -i bash
Ini dimulai bashtetapi tidak mentransfer lingkungan saat ini ke bashproses baru (masih akan memiliki variabel lingkungan karena menciptakan yang baru dari skrip inisialisasi shell-nya).
Contoh perbedaan
$ var="hello" # create shell variable "var"
$ bash # start _new_ bash session
$ echo "$var" # no output
$ exit # back to original shell session
$ echo "$var" # "hello" is outputted
$ unset var # remove variable
$ export VAR="hello" # create environment variable "VAR"
$ bash
$ echo "$VAR" # "hello" is outputted since it's exported
$ exit # back to original shell session
$ unset VAR # remove variable
$ ( export VAR="hello"; echo "$VAR" ) # set env. var "VAR" to "hello" in subshell and echo it
$ echo "$VAR" # no output since a subshell has its own environment
Bahasa lainnya
Ada fungsi perpustakaan di sebagian besar bahasa pemrograman yang memungkinkan untuk mendapatkan dan mengatur variabel lingkungan. Perhatikan bahwa karena variabel lingkungan disimpan sebagai hubungan nilai kunci yang sederhana, mereka biasanya bukan "variabel" bahasa. Suatu program dapat mengambil nilai (yang selalu berupa string karakter) yang terkait dengan kunci (nama variabel lingkungan), tetapi kemudian harus mengonversinya menjadi bilangan bulat atau apa pun tipe data apa pun yang diharapkan memiliki nilai oleh bahasa.
Dalam C, variabel lingkungan dapat diakses menggunakan getenv(), setenv(), putenv()dan unsetenv(). Variabel yang dibuat dengan rutinitas ini diwarisi dengan cara yang sama dengan proses apa pun yang dimulai program C.
Bahasa lain mungkin memiliki struktur data khusus untuk mencapai hal yang sama, seperti %ENVhash di Perl, atau ENVIRONarray asosiatif di sebagian besar implementasi awk.