2009-02-04 8 views

Odpowiedz

41

pomocą wbudowanego polecenia compgen:

compgen -A variable | grep X 
+3

(+1) Działa to również ze zmiennymi lokalnymi. To compgen było dzisiejszym objawieniem - myślę, że powinienem * przestudiować * wszystkie wbudowane bashy ... –

6

ten powinien zrobić:

env | grep ".*X.*" 

Edit: przepraszam, że wygląda na X wartości zbyt. Ta wersja wygląda tylko dla X w nazwie var

env | awk -F "=" '{print $1}' | grep ".*X.*" 

Jak Paweł zwraca uwagę w komentarzach, jeśli szukasz zmiennych lokalnych też env musi zostać wymieniona z zestawem:

set | awk -F "=" '{print $1}' | grep ".*X.*" 
+1

Przyjmuje tylko zmienne środowiskowe, a nie lokalne. Chociaż użycie "set" zamiast "env" może działać. –

+0

Dzięki, nie wiedziałem o secie, zwykle "eksportuję" dowolnych varów, którymi jestem zainteresowany, więc używam tylko env. – diciu

+1

ustaw również funkcję drukowania, nie tylko zmienne lokalne i zmienne środowiskowe. – zhaorufei

1

Najprostszym może być to zrobić

printenv |grep D.*= 

Jedyną różnicą jest to również wypisuje wartości zmiennej.

1
env | awk -F= '{if($1 ~ /X/) print $1}' 
+0

Potrzebowałem również uzyskać wartości. Po prostu usunięto '$ 1' z twojego rozwiązania, mój problem został rozwiązany. Dzięki. – jpbochi

3

To wyszukiwania dla X tylko w nazwach zmiennych i wyjście tylko pasującymi nazwami zmiennych:

set | grep -oP '^\w*X\w*(?==)' 

lub dla łatwiejszej edycji szukanego wzorca

set | grep -oP '^\w*(?==)' | grep X 

lub po prostu (może bardziej łatwa do zapamiętania)

set | cut -d= -f1 | grep X 

Jeśli chcesz dopasować X wewnątrz nazw zmiennych, ale wyjście w name = formy wartości, a następnie:

set | grep -P '^\w*X\w*(?==)' 

a jeśli chcesz, aby dopasować X wewnątrz nazw zmiennych, ale tylko wartość wyjściowa, a następnie:

set | grep -P '^\w*X\w*(?==)' | grep -oP '(?<==).*' 
+0

to musi zauważyć, że -P może wymagać zainstalowania dodatkowej biblioteki na starszych platformach – noonex

Powiązane problemy