Dengan keluarga shell Bourne, variabel shell semua memiliki nama-nama huruf besar; yang berarti Anda tidak dapat mengetahui apakah variabel tertentu adalah variabel lingkungan atau tidak hanya dengan melihat namanya. Bagaimana Anda menentukan variabel shell Bourne mana yang lokal (hanya didefinisikan dalam shell saat ini)?
13
Jawaban:
Jika Anda ingin melihat apakah suatu variabel diekspor atau tidak, gunakan
declare
:sumber
Cara yang paling portabel adalah
export -p
.export -p
daftar variabel yang diekspor. Ini biasanya sepertideclare -x
, jika shell Anda memilikideclare
.Kerang Bourne-style yang sedang digunakan harus mendukung
export -p
, seperti yang disyaratkan oleh POSIX :Standar selanjutnya menjelaskan bahwa nilai variabel ditampilkan sedemikian rupa yang biasanya memungkinkannya untuk digunakan nanti di sisi kanan
=
dalam penugasan. Ini untuk mengatakan bahwa itu dapat dikutip. Kerang yang berbeda dapat menampilkannya secara berbeda tetapi dengan efek yang sama.export -p
bekerja bahkan di shell yang tidak memilikideclare
builtin, seperti Dash .Saya telah memipipkan output ke
grep
untuk kekompakan tetapi jika Anda tidak memfilternya maka Anda mendapatkan daftar lengkap dari variabel yang diekspor. Dari pertanyaan Anda, sepertinya itulah yang menurut Anda paling berguna.Beberapa shell, seperti Bash, menggunakan format non-standar kecuali diperintahkan secara eksplisit untuk berperilaku sesuai cara POSIX. Di Bash
export -p
memberikan output yang samadeclare -x
dengan default.Zsh menunjukkan format yang tidak standar bahkan ketika kompatibilitas POSIX diaktifkan:
Dalam kasus apa pun, Anda dapat mengekstraksi representasi portabel (yang dapat dikutip) dengan mencari kata yang diikuti oleh
=
. Ini tidak bergantung pada kata-kata sebelumnya di telepon, asalkan mereka tidak segera mendahului=
, yang seharusnya tidak mereka lakukan. Sebagai contoh:Perhatikan bahwa tidak semua entri memiliki
=
. Ini karena variabel dapat tidak disetel tetapi diekspor. Entri-entri itu disaring olehgrep
perintah di atas, yang mungkin atau mungkin tidak seperti yang Anda inginkan.Sebagian besar waktu, Anda hanya ingin memeriksa output dan sehingga Anda tidak akan peduli jika entri didahului oleh
export
,declare -x
,typeset -x
, atau sesuatu yang lain. Maka jalankan sajaexport -p
.Saya menguji perintah-perintah itu di Ubuntu 16.04 LTS dengan versi resmi setiap paket shell.
sumber
Variabel yang TIDAK diekspor dapat dilihat dari output
declare
perintah di bash.Variabel yang sedang diekspor dapat dilihat dari output
declare -x
atauexport
perintah di bash.sumber