Saat mengatur variabel dalam .bashrc
, haruskah saya menggunakan ini?
export VAR=value
Atau apakah ini cukup?
VAR=value
Apa perbedaan sebenarnya (jika ada)?
Saat mengatur variabel dalam .bashrc
, haruskah saya menggunakan ini?
export VAR=value
Atau apakah ini cukup?
VAR=value
Apa perbedaan sebenarnya (jika ada)?
Jawaban:
export VAR=value
Perbuatan
VAR=value
hanya menetapkan variabel selama durasi skrip ( .bashrc
dalam hal ini). Proses anak (jika ada) dari skrip tidak akan memiliki VAR yang ditentukan, dan setelah skrip keluar, VAR
pergi.
export VAR=value
secara eksplisit menambah VAR
daftar variabel yang diteruskan ke proses anak. Mau mencobanya? Buka shell, lakukan
PS1="foo > "
bash --norc
Shell baru mendapatkan prompt default. Jika sebaliknya Anda melakukan sesuatu seperti
export PS1="foo > "
bash --norc
shell baru mendapatkan prompt yang baru saja Anda atur.
Pembaruan: seperti yang dicatat Ian Kelling di bawah ini, variabel yang ditetapkan .bashrc
tetap ada di shell yang bersumber .bashrc
. Lebih umum setiap kali shell sumber skrip (menggunakan source scriptname
perintah) variabel yang ditetapkan dalam skrip bertahan seumur hidup shell.
PS1
adalah contoh buruk dari variabel yang akan diekspor sebagai variabel lingkungan. Ini hanya berarti untuk proses anak yang merupakan cangkang dan ditafsirkan secara berbeda oleh cangkang yang berbeda (misalnya, bash dan dash) Praktik terbaik adalah dengan hanya mengaturnya sebagai variabel shell biasa di .bashrc
. Contoh yang lebih baik dari variabel lingkungan meliputi HOME
, PATH
, EDITOR
, dll
Keduanya tampaknya berfungsi dengan baik, tetapi menggunakan ekspor akan memastikan variabel tersedia untuk subkulit dan program lainnya. Untuk menguji ini coba ini.
Tambahkan dua baris ini ke file .bashrc Anda
TESTVAR="no export"
export MYTESTVAR="with export"
Kemudian buka shell baru.
Berjalan echo $TESTVAR
dan echo $MYTESTVAR
akan menampilkan konten masing-masing variabel. Sekarang di dalam shell yang sama hapus dua baris dari file .bashrc Anda dan jalankan bash
untuk memulai subshell.
Menjalankan echo $TESTVAR
akan memiliki output kosong, tetapi menjalankan echo $MYTESTVAR
akan menampilkan "dengan ekspor"