Rozszerzenie brace jest przydatną techniką generowania list ciągów, które mogą być używane w skryptach i aliasach oraz w wierszu poleceń Linux. Oszczędzaj czas i unikaj błędów, wpisując mniej.
Rozbudowa brace
Przed skorupą bash Wykonuje polecenie W oknie końcowym lub linii w skrypcie sprawdza, czy wymaga wykonania żadnych podstawień na polecenie. Nazwy zmiennych są zastępowane przez ich wartości, aliasy są zastępowane przez polecenia, które są skrótami, a każda ekspansja jest wykonywana. Rozszerzenie brace to jedna forma ekspansji obsługiwanej przez bash.
Ekspansja brace jest dostępna w nowoczesnych skorupach, ale może to zaginąć od niektórych starych muszli. Jeśli zamierzasz używać rozbudowy klamry w skryptach, upewnij się, że wywołasz powłokę, która obsługuje rozbudowę brace, takie jak bash:
Będziemy używać bash dla naszych przykładów.
Wygenerowania listy łańcuchów może wydawać się bardziej nowością niż korzyści, ale oferuje pewną funkcjonalność, która może zaoszczędzić czas i naciśnięcia klawiszy. Często może zapewnić proste i eleganckie rozwiązanie problemu lub wymagania.
Proste rozszerzenia
Rozszerzanie brace jest zawarte między parą szelki "{}". Może to być lista elementów oddzielonych przecinkami lub specyfikatorem zakresu. Przestrzenie nie są dozwolone w szelkach, chyba że owinęłeś ciąg w cudzysłów "
"
. "
W przypadku listy rozdzielonych przecinkami proces rozszerzeń bierze każdy element z kolei i przechodzi go do polecenia wywołania. W tym przykładzie jest
Echo
to prosto
Wydrukuje je w oknie terminala
. Zauważ, że przecinki są ignorowane.
Echo {jeden, dwa, trzy, cztery}
Lista może być słowami lub cyframi.
Echo {1,2,3,4}
Kolejność elementów listy jest całkowicie arbitralna.
Echo (4,2,3,1)
Zakres ekspansji ma początek i znak końcowy połączony z dwoma okresami "
..
"Bez jakichkolwiek białych znaków. Wszystkie brakujące elementy listy są dostarczane automatycznie przez rozszerzenie, dzięki czemu tworzona jest cały zakres od znaku początku do znaku końcowego.
Spowoduje to wydrukowanie cyfr od 1 do 10.
Echo {1..10}
Numeracja jest arbitralna. Nie musi zaczynać się od jednego.
Echo {3..12}
Zakresy można określić, aby działały do tyłu. Spowoduje to wygenerowanie listy od pięciu do jednego.
Echo {5..1}
Zakresy mogą obejmować liczby ujemne.
Echo {4 ..- 4}
Jak wcześniej wskazaliśmy, zasięg ma początek i koniec postać . Nie musi być liczbą. Może to być list.
Echo {Q..v}
Litery mogą również prowadzić do tyłu.
Echo {f..a}
Korzystanie z rozbudowy brace z pętlami
Możesz użyć rozbudowy brace z zakresami pętli w skryptach.
dla I w {3..7}
robić
echo $ I.
zrobione
Zakresy rozszerzeń brace umożliwiają używanie znaków jako zmiennej pętli.
dla I w {m..q}
robić
echo $ I.
zrobione
Pętle są zwykle używane w skryptach, ale nie ma nic do powstrzymania cię przed wpisując je do wiersza poleceń, aby zobaczyć, co się stanie.
dla I w {3..7}; Czy echo $ I; zrobione
dla I w {m..q}; Czy echo $ I; zrobione
Concatenating and Nesting.
Dwa sąsiednie ekspansje nie działają niezależnie po drugim. Interopery. Każdy element w pierwszej ekspansji jest działany przez każdy element w drugiej ekspansji.
Echo {Q..v} {1..3}
Eksporia mogą być również zagnieżdżone. Zagnieżdżona ekspansja będzie działać na elemencie natychmiast poprzedzający go.
Echo {część-1, część-2 {A, B, C, D}, część-3}
Możesz także gniazdować rozszerzenia poprzez utworzenie rozszerzonej przecinku listy rozszerzeń zakresu.
Echo {{5..0}, {1..5}}
Preambuła i PostScript.
Możesz umieścić tekst przed i po rozbudowie klamry, aby ten tekst był zawarty w wynikach ekspansji. Tekst umieszczony przed rozszerzeniem nazywa się preambułą, podczas gdy tekst umieszczony za ekspansją brace jest nazywany PostScript.
To polecenie używa preambuły.
Echo rozdział {1..3}
Ten przykład używa PostScript:
Echo {Zawartość, papier, bilbiografia} .md
A to polecenie używa obu.
Echo Rozdział - {1..4} .md
Rozszerzanie nazw plików i katalogi
Jak już prawdopodobnie odgadłeś, jednym z głównych zastosowań ekspansji brace jest tworzenie nazw plików i katalogów, które można przekazać do innych poleceń. Używamy
Echo
Jako wygodny sposób, aby zobaczyć dokładnie, co się dzieje, gdy wyzwala się ekspansję. Możesz zastąpić dowolne polecenie, które podejmuje nazwy plików lub katalogów jako wejściowe i użyj rozbudowy brace.
Za szybko
Utwórz niektóre pliki
, posługiwać się
dotykać
:
Dotknij pliku- {1..4} .txt
LS * .txt
Jeśli masz wiele plików o tej samej nazwie podstawowej, ale różnych rozszerzeń plików i chcesz wykonać operację na ich podzbiorze, rozszerzenia brace może pomóc. Tutaj kompresujemy podzbiór plików, które mają "program" jako podstawę do pliku ZIP o nazwie "source-code.zip".
Katalogi rozwój zawierają wiele plików, które będą miały tę samą podstawę jako główny program. Zwykle nie chcesz kopii zapasowej ani rozpowszechniania plików takich jak pliki obiektów ".o". Jest to schludny sposób, aby uwzględnić tylko interesujące typy plików.
Program kodu źródłowego ZIP {.C, .H, .CSS}
To polecenie spowoduje kopię pliku i dołącz do niego ".bak", dzięki czemu kopia kopii zapasowej oryginalnego pliku. Ciekawym punktem, aby pamiętać jest, że ekspansja brace zawiera listę rozdzieloną przecinkami, ale pierwszy element jest pusty. Gdybyśmy nie uwzględnili przecinek, ekspansja nie miałaby miejsca.
CP Brace / New / Prog-1.C {,. Bak}
LS Brace / New / Prog-1.c.bak
Aby wykonać kilka akcji na dwóch plikach w różnych katalogach, możemy użyć rozbudowy w ścieżce do plików.
W tym przykładzie katalog "Brace" zawiera dwa podkatalogi, jeden o nazwie "Nowy" i jeden o nazwie "Stary". Zawierają różne wersje tego samego zestawu plików kodu źródłowego. Użyjemy
diff.
program, aby zobaczyć różnice między dwiema wersjami "PROG-1.C".
Diff Brace / {New, Old} /Prog-1.C
Jeśli masz standardowy szkielet katalogów, które musisz stworzyć na początku projektu, możesz szybko utworzyć je za pomocą rozbudowy brace. ten
mkdir.
-P
Opcja (rodzic)
Tworzy wszelkie brakujące katalogi nadrzędne
kiedy tworzony jest katalog dziecko.
Mkdir -p {Źródło, Buduj, człowiek, Pomoc {/ Strony, / Yelp, / obrazy}}
Drzewo
Możesz użyć rozbudowy brace
wget.
do
Pobierz wiele plików
.
W tym poleceniu zamierzamy pobrać pliki z dwóch katalogów, zwanych "Test1" i "Test2". Każdy katalog posiada dwa pliki o nazwie "Picture1" i "Zdjęcie2".
Wget https://www.url-of-your-choice.com/test {1,2 }/picture 001,002 ).jpg
Listing Pliki pokazuje pobrane pliki i jak
wget.
Zmień nazwę plików, aby uniknąć nazwy starań z istniejącymi plikami.
LS Picture *. *
Ogarnąć klamrę
Wydaje się, że ekspansja klamry jest kolejna Najlepsze tajemnice Linux . Wielu ludzi mówi mi, że nigdy nie słyszeli o rozszerzeniu klamry, podczas gdy inni informują mnie, że to jedna z ich ulubionych sztuczek wiersza poleceń.
Daj mu spróbuj, a może znaleźć drogę do twojego zestawu linii poleceń przejść do sztuczek.