İşte bazı geçici çözümler:
$ comm -3 <(declare | sort) <(declare -f | sort)
Yıkmak:
declare
Her tanımlanmış değişkeni (dışa aktarılan veya dışlanan) ve işlevini yazdırır.
declare -f
sadece işlevleri yazdırır.
comm -3
Her ikisi için ortak olan tüm satırları kaldıracak. Aslında bu, sadece değişkenleri bırakarak fonksiyonları kaldıracaktır.
Yalnızca dışa aktarılmayan değişkenleri yazdırmak için:
$ comm -3 <(comm -3 <(declare | sort) <(declare -f | sort)) <(env | sort)
Başka bir geçici çözüm:
$ declare -p
Bu sadece değişkenleri yazdıracak, fakat bazı çirkin niteliklere sahip olacaktır.
declare -- BASH="/bin/bash"
declare -ir BASHPID=""
declare -A BASH_ALIASES='()'
declare -a BASH_ARGC='()'
...
Öznitelikleri keserek kesebilirsin ... cut:
$ declare -p | cut -d " " -f 3
Bir dezavantajı, IFS'nin değerinin sergilenmek yerine yorumlanmasıdır.
karşılaştırmak:
$ comm -3 <(declare | sort) <(declare -f | sort)
...
IFS=$' \t\n'
...
$ declare -p | cut -d " " -f 3
...
IFS="
"
...
Bu, "
bir satırdaki yalnızlık nedeniyle, bu çıktının ileri işleme için kullanılmasını oldukça zorlaştırır . Bunu önlemek için belki bir miktar IFS-fu yapılabilir.
Başka bir geçici çözüm, compgen
şunları kullanarak :
$ compgen -v
Bash yerleşiminin compgen
tamamlama komut dosyalarında kullanılması amaçlanmıştır. Bu amaçla, compgen -v
tanımlanmış tüm değişkenleri listeler. Dezavantajı: değerleri değil, sadece değişken isimlerini listeler.
Burada ayrıca değerleri listelemek için bir kesmek.
$ compgen -v | while read var; do printf "%s=%q\n" "$var" "${!var}"; done
Avantaj: Saf bir soluk çözeltisidir. Dezavantaj: yorumlanmasından dolayı bazı değerler berbat olur printf
. Ayrıca borudan ve / veya döngüden alt kabuk bazı ekstra değişkenler ekler.