Agencja internetowa » Wiadomości cyfrowe » Jak używać rozszerzenia nawiasów klamrowych w Linux Bash Shell

Jak używać rozszerzenia nawiasów klamrowych w Linux Bash Shell

Okno terminala w systemie Linux.
Fatmawati Achmad Zaenuri/Shutterstock

Rozszerzanie nawiasów klamrowych jest użyteczną techniką generowania list ciągów znaków, których można używać w skryptach i aliasach oraz w wierszu poleceń systemu Linux. Oszczędzaj czas i unikaj błędów, wpisując mniej.

Przedłużenie klamry

Zanim powłoka Bash wykona polecenie w oknie terminala lub wiersz w skrypcie, sprawdza, czy musi wykonać jakieś podstawienia w poleceniu. Nazwy zmiennych są zastępowane ich wartościami, aliasy są zastępowane poleceniami, dla których są skrócone i dokonywana jest każda interpretacja. Rozszerzenie Brace to forma rozszerzenia wspierana przez Bash.

Rozszerzenie klamry jest dostępne w nowoczesnych pociskach, ale może go brakować w niektórych starszych pociskach. Jeśli planujesz używać rozwijania nawiasów w skryptach, pamiętaj, aby wywołać powłokę obsługującą rozwijanie nawiasów, taką jak Bash:

W naszych przykładach użyjemy Basha.

Generowanie list kanałów może wydawać się bardziej nowością niż korzyścią, ale oferuje pewne funkcje, które mogą zaoszczędzić czas i naciśnięcia klawiszy. Często może stanowić proste i eleganckie rozwiązanie problemu lub wymagania.

Proste rozszerzenia

Rozszerzenie nawiasów klamrowych jest zawarte między parą nawiasów klamrowych „{}”. Może to być lista elementów rozdzielonych przecinkami lub specyfikator zakresu. Spacje nie są dozwolone w nawiasach klamrowych, chyba że umieścisz ciąg w cudzysłowie „ ". »

W przypadku listy rozdzielanej przecinkami, proces rozwijania bierze kolejno każdy element i przekazuje go do wywołującego polecenia. W tym przykładzie jest to echo który po prostu drukuje je w oknie terminala. Zauważ, że przecinki są ignorowane.

echo {jeden, dwa, trzy, cztery}

Lista może składać się ze słów lub liczb.

echo {1,2,3,4}

Kolejność pozycji na liście jest całkowicie dowolna.

echo(4,2,3,1)

Zakres rozszerzenia ma znak początkowy i znak końcowy połączone dwukropkiem „ .. »Bez miejsca. Wszelkie brakujące elementy listy są dostarczane automatycznie przez rozwinięcie, dzięki czemu tworzony jest cały zakres od znaku początkowego do znaku końcowego.

Spowoduje to wydrukowanie liczb od 1 do 10.

echo {1..10}

Numeracja jest dowolna. Nie musisz zaczynać od jednego.

echo {3..12}

Zakresy można określić, aby działały wstecz. Spowoduje to wygenerowanie listy pięciu do jednego.

echo {5..1}

Zakresy mogą zawierać liczby ujemne.

echo {4 ..- 4}

Jak wspomnieliśmy wcześniej, zakres ma początek i koniec charakter. Nie musi to być liczba. Może to być list.

echo {rzecz..}

Litery można również odwrócić.

echo {f.}

Używanie przedłużenia ortezy z lokami

Możesz użyć rozwinięcia nawiasów klamrowych z zakresami w pętlach w skryptach.

for i in {3..7} wykonaj echo $ i gotowe

Zakresy rozszerzania nawiasów klamrowych umożliwiają używanie znaków jako zmiennej pętli.

for i in {m..q} wykonaj echo $ i gotowe

Pętle są zwykle używane w skryptach, ale nic nie stoi na przeszkodzie, aby wpisać je w wierszu poleceń, aby zobaczyć, co się stanie.

dla i w {3}; wykonaj echo $ i; zrobione

dla i w {m..q}; wykonaj echo $ i; zrobione

Łączenie i zagnieżdżanie

Dwa sąsiednie rozszerzenia nie działają niezależnie jedno po drugim. Współdziałają. Każdy element z pierwszego rozszerzenia podlega działaniu każdego elementu z drugiego rozszerzenia.

echo {q..v} {1..3}

Rozszerzenia można również zagnieżdżać. Zagnieżdżone rozwinięcie działa na element bezpośrednio go poprzedzający.

echo {część-1, część-2 {a, b, c, d}, część-3}

Możesz także zagnieżdżać rozszerzenia, tworząc listę rozdzielonych przecinkami rozszerzeń zakresu.

echo {{5..0}, {1..5}}

Preambuła i Postscriptum

Możesz umieścić tekst przed i po rozwinięciu w nawiasach klamrowych, aby uwzględnić ten tekst w wynikach rozwinięcia. Tekst umieszczony przed rozszerzeniem nazywamy preambułą, natomiast tekst umieszczony za rozszerzeniem nawiasów klamrowych nazywamy postscriptem.

To polecenie używa preambuły.

echo rozdział {1..3}

W tym przykładzie użyto postscriptu:

echo {treść, papier, bilbiografia} .md

A to polecenie używa obu.

echo rozdział- {1..4} .md

Rozszerzenie nazw plików i katalogów

Jak zapewne zgadłeś, jednym z głównych zastosowań rozszerzeń nawiasów klamrowych jest tworzenie nazw plików i katalogów, które mogą być przekazywane do innych poleceń. Użyliśmy echo jako wygodny sposób sprawdzenia, co się dzieje po uruchomieniu rozszerzenia. Możesz zastąpić dowolne polecenie, które pobiera nazwy plików lub katalogów jako dane wejściowe i użyć z nim rozwinięcia nawiasów klamrowych.

Aby szybko utworzyć kilka plików, użyj touch:

dotknij plik- {1..4} .txt
ls * .txt

Jeśli masz wiele plików o tej samej nazwie podstawowej, ale z różnymi rozszerzeniami plików i chcesz wykonać operację na ich podzbiorze, pomocne mogą być rozszerzenia nawiasów klamrowych. Tutaj kompresujemy podzbiór plików o nazwie podstawowej „program” do pliku ZIP o nazwie „kod-źródłowy.zip”.

Katalogi programistyczne zawierają wiele plików, które będą miały taką samą nazwę podstawową jak program główny. Zwykle nie chcesz tworzyć kopii zapasowych ani rozpowszechniać plików, takich jak pliki obiektów „.o”. To świetny sposób na uwzględnienie tylko tych typów plików, które Cię interesują.

program z kodem źródłowym zip {.c, .h, .css}

To polecenie utworzy kopię pliku i doda do niego „.bak”, tworząc kopię zapasową oryginalnego pliku. Warto zauważyć, że rozwinięcie nawiasów klamrowych zawiera listę oddzieloną przecinkami, ale pierwszy element jest pusty. Gdybyśmy nie uwzględnili przecinka, rozszerzenie nie miałoby miejsca.

cp brace / nowy / prog-1.c {,.bak}
ls klamra / nowy / prog-1.c.bak

Aby wykonać akcję na dwóch plikach w różnych katalogach, możemy użyć rozszerzenia nawiasu klamrowego w ścieżce pliku.

W tym przykładzie katalog „nawiasy klamrowe” zawiera dwa podkatalogi, jeden o nazwie „nowy”, a drugi o nazwie „stary”. Zawierają różne wersje tego samego zestawu plików kodu źródłowego. Użyjemy diff programu, aby zobaczyć różnice między dwiema wersjami "prog-1.c".

diff nawias / {nowy, stary} /prog-1.c

Jeśli masz standardowy szkielet katalogów, które musisz utworzyć na początku projektu, możesz je szybko utworzyć za pomocą rozwinięcia nawiasów. ten mkdir -p Opcja (rodzic) tworzy wszystkie brakujące katalogi nadrzędne podczas tworzenia katalogu podrzędnego.

mkdir -p {źródło, kompilacja, człowiek, pomoc {/ strony, / skowyt, / obrazy}}
drzewo

Możesz użyć rozszerzenia szelek za pomocą wget aby pobrać wiele plików.

W tym poleceniu pobierzemy pliki z dwóch katalogów, nazwanych „test1” i „test2”. Każdy katalog zawiera dwa pliki o nazwach „image1” i „image2”.

wget https://www.URL-of-your-choice.com/test Danemark1,2 Danemark/picture Danemark001,002 Danemark.jpg

Lista plików pokazuje, które pliki zostały odzyskane i w jaki sposób wget zmienia nazwy plików, aby uniknąć konfliktów nazw z istniejącymi plikami.

ls obraz *. *

Pocałuj uścisk

Wygląda na to, że rozszerzenie nawiasów klamrowych to kolejna z najlepiej strzeżonych tajemnic Linuksa. Wiele osób mówi mi, że nigdy nie słyszało o przedłużaniu nawiasów klamrowych, podczas gdy inni mówią mi, że jest to jedna z ich ulubionych wskazówek dotyczących wiersza poleceń.

Spróbuj, a może znaleźć się w zestawie porad dotyczących wiersza poleceń.

★ ★ ★ ★ ★