Saat mengatur variabel dalam .bashrc
, haruskah saya menggunakan ini?
export VAR=value
Atau apakah ini cukup?
VAR=value
Apa perbedaan sebenarnya (jika ada)?
sumber
Saat mengatur variabel dalam .bashrc
, haruskah saya menggunakan ini?
export VAR=value
Atau apakah ini cukup?
VAR=value
Apa perbedaan sebenarnya (jika ada)?
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 meliputiHOME
,PATH
,EDITOR
, dllKeduanya 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
Kemudian buka shell baru.
Berjalan
echo $TESTVAR
danecho $MYTESTVAR
akan menampilkan konten masing-masing variabel. Sekarang di dalam shell yang sama hapus dua baris dari file .bashrc Anda dan jalankanbash
untuk memulai subshell.Menjalankan
echo $TESTVAR
akan memiliki output kosong, tetapi menjalankanecho $MYTESTVAR
akan menampilkan "dengan ekspor"sumber