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 ( .bashrcdalam hal ini). Proses anak (jika ada) dari skrip tidak akan memiliki VAR yang ditentukan, dan setelah skrip keluar, VARpergi.
export VAR=value
secara eksplisit menambah VARdaftar 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 .bashrctetap ada di shell yang bersumber .bashrc. Lebih umum setiap kali shell sumber skrip (menggunakan source scriptnameperintah) variabel yang ditetapkan dalam skrip bertahan seumur hidup shell.
PS1adalah 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 $TESTVARdan echo $MYTESTVARakan menampilkan konten masing-masing variabel. Sekarang di dalam shell yang sama hapus dua baris dari file .bashrc Anda dan jalankan bashuntuk memulai subshell.
Menjalankan echo $TESTVARakan memiliki output kosong, tetapi menjalankan echo $MYTESTVARakan menampilkan "dengan ekspor"