2011-05-12 20 views
7

Kabuğuma echo ${!BASH*} girdiğimde, adı "BASH" dizesiyle başlayan tüm env varyantlarını alıyorum:BASH kabuk parametresi (dolaylı) genişletme

BASH BASHOPTS BASHPID BASH_ALIASES BASH_ARGC BASH_ARGV BASH_CMDS BASH_COMMAND BASH_LINENO BASH_SOURCE BASH_SUBSHELL BASH_VERSINFO BASH_VERSION 

BASH man sayfası, shell parameter (indirect) expansion adı verilen bu özellik hakkında oldukça dikkatli. Bu bilgi (bu özel globbing modunun sözdizimi) bir yerde olmalı ama bulamıyorum.

  1. Değişken adının sonunda bir dizeyle eşleştirebilir miyim?

    Ancak çoğunlukla

  2. Değişken adında herhangi bir yerde bir dizeyle eşleşebilir miyim?

    Ne güzel olurdu

  3. ile (*) arasında değişken isminde herhangi bir yeri eşleştirebilir miyim? (temel olarak bir for döngüsündeki herhangi bir değişkeni ve BTW'yi tam olarak ne yapmaya çalıştığımı listeleyin)

cevap

6

adının sonunda eşleşen dolaylı isim genişleme yapmak için hiçbir yerleşik bir yoldur .

$ compgen -v | grep -E "HOME$" 

Bu isim HOME biter her değişkeni eşleşir: Burada

istediğini yapabileceği hangi bir komuttur.

Grep parçasını değiştirerek değişken adının herhangi bir bölümünü eşleştirebilirsiniz. Tamamlama komut dosyalarında kullanılmak üzere bir bash yerleşiğidir. compgen -v tüm değişken adlarını listeler. compgen -v BASH, echo ${!BASH*} ile aynı değişkenleri listeleyecektir, ancak her satır için bir tane.