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 -n
in bash
), jadi biasanya tidak perlu untuk mengekspornya kembali. Membatalkan pengaturan variabel dengan unset
menghapusnya (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 make
dengan variabel lingkungan CC
diatur ke nilai clang
dan CXX
diatur ke clang++
.
Ini juga dapat digunakan untuk membersihkan lingkungan untuk suatu proses:
env -i bash
Ini dimulai bash
tetapi tidak mentransfer lingkungan saat ini ke bash
proses 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 %ENV
hash di Perl, atau ENVIRON
array asosiatif di sebagian besar implementasi awk
.