Katakanlah saya mengekspor variabel:
foo=bar
export foo
Sekarang, saya ingin membatalkan ekspornya. Itu untuk mengatakan, jika saya lakukan sh -c 'echo "$foo"'
saya tidak seharusnya bar
. foo
seharusnya tidak muncul di sh -c
lingkungan sama sekali.
sh -c
hanyalah sebuah contoh, cara mudah untuk menunjukkan keberadaan suatu variabel. Perintah itu bisa berupa apa saja - itu mungkin sesuatu yang perilakunya dipengaruhi hanya oleh kehadiran variabel di lingkungannya.
Saya bisa:
unset
variabel, dan kehilangan itu- Hapus menggunakan
env
untuk setiap perintah:env -u foo sh -c 'echo "$foo"'
- tidak praktis jika Anda ingin terus menggunakan shell saat ini untuk sementara waktu.
Idealnya, saya ingin menyimpan nilai variabel, tetapi tidak memilikinya muncul sama sekali dalam proses anak, bahkan sebagai variabel kosong.
Saya kira saya bisa melakukan:
otherfoo="$foo"; unset foo; foo="$otherfoo"; unset otherfoo
Ini berisiko menginjak otherfoo
, jika sudah ada.
Apakah itu satu-satunya jalan? Apakah ada cara standar?
sh -c
Perintah ini hanyalah sebuah contoh. Ambil perintah apa pun di mana Anda tidak dapat menghapus variabel sebagai gantinya, jika Anda mau.
mktemp
jika itu cukup portabel, dan menghapus nilai, dan sumber file sementara untuk menetapkan variabel. Setidaknya file sementara dapat dibuat dengan nama yang kurang lebih berbeda dengan variabel shell.