Brace expansion är en användbar teknik för att generera listor med strängar som kan användas i skript och alias och Linux kommandorad. Spara tid och undvika misstag genom att skriva mindre.
Brace Expansion
Innan Bash skal exekverar ett kommando i ett terminalfönster eller en linje i ett skript, kontrollerar den om den behöver utföra några utbyten på kommandot. Variabelnamn ersättas med sina värden, alias ersättas med kommandon De är förkortning för, och eventuella expansionen utförs. Brace expansion är en form av expansions stöds av våldsamt slag.
Brace expansionen finns i moderna skal, men det kan saknas från några gamla skal. Om du ska använda stag expansion i manus, se till att du anropar ett skal som stöd brace expansion, till exempel Bash:
Vi kommer att använda Bash för våra exempel.
Generera listor över strängarna kan tyckas mer av en nyhet än en fördel, men det ger vissa funktioner som kan spara tid och tangenttryckningar. Ofta kan det ge en enkel och elegant lösning på ett problem eller krav.
enkla Expansioner
En brace expansionen innehålls mellan ett par hängslen ”{}”. Det kan vara en lista med kommaseparerade objekt eller en rad specifice. Spaces är inte tillåtna inne i hängslen om du inte har insvept strängen inom citationstecken ”
"
.
För en kommaseparerad lista, tar expansionsprocessen varje element i tur och skickar den till kommandot ringer. I detta exempel är det
eko
som helt enkelt
skriver ut dem i terminalfönstret
. Observera att kommatecken ignoreras.
echo {en, två, tre, fyra}
En lista kan vara ord eller siffror.
echo {1,2,3,4}
Ordningen på listelement är helt godtyckligt.
eko (4,2,3,1)
En utbyggnad serien har en början och ett slut karaktär i samband med två perioder”
..
”Utan blanksteg. Alla de saknade listelementen tillhandahålls automatiskt av expansionen, så att hela skalan från starttecknet till sluttecknet skapas.
Detta skriver ut siffrorna 1-10.
echo {1..10}
Numreringen är godtycklig. Det behöver inte börja på en.
echo {3..12}
Intervall kan anges så att de kör bakåt. Detta kommer att generera en lista från fem ner till en.
echo {5..1}
Intervall kan innehålla negativa tal.
echo {4 ..- 4}
Som vi tidigare påpekat, har en räckvidd en början och ett slut karaktär . Det behöver inte vara ett nummer. Det kan vara en bokstav.
echo {q..v}
Bokstäverna kan köra bakåt också.
echo {f..a}
Använda Brace Expansion med loopar
Du kan använda brace expansionen med intervall i loopar i skript.
for i in {3..7}
do
echo $ i
gjort
Brace expansionsområden låter dig använda tecken som loopvariabeln.
for i in {m..q}
do
echo $ i
gjort
Loops används vanligen i manus, men det finns inget som hindrar dig från att skriva in dem i kommandoraden för att se vad som händer.
for i in {3..7}; gör echo $ i; gjort
for i in {m..q}; gör echo $ i; gjort
Sammanfoga och Nesting
Två angränsande utökningar inte agera självständigt efter varandra. De samverka. Varje element i den första expansions påverkas av varje element i den andra expansions.
echo {q..v} {1..3}
Expansioner kan också kapslas. En kapslad expansionen kommer att agera på elementet som omedelbart föregår den.
echo {del-1, del-2 {a, b, c, d}, del-3}
Du kan också kapsla expansioner genom att skapa en kommaseparerad lista avstånds expansion.
echo {{5..0}, {1..5}}
Ingress och Postscript
Du kan placera text före och efter ett stag expansion har den text som ingår i resultatet av expansionen. Text sätta framför en expansion kallas ingressen, medan text placerad bakom ett stag expansionen kallas postscript.
Detta kommando använder en ingress.
eko kapitel {1..3}
Detta exempel använder en efterskrift:
echo {innehåll, papper, bilbiography} .md
Och det här kommandot använder båda.
echo chapter- {1..4} .md
Expanderande filnamn och kataloger
Som du har förmodligen gissat vid det här laget, är en av de viktigaste användningsområdena för stag expansioner för att skapa filnamn och katalog som kan skickas till andra kommandon. Vi har använt
eko
som ett bekvämt sätt att se exakt vad som händer när en expansion utlöses. Du kan ersätta alla kommando som tar filnamn eller katalognamn som indata och användning stag expansion med det.
För att snabbt
skapa några filer
, använda sig av
Rör
:
beröring fil- {1..4} .txt
ls * .txt
Om du har många filer med samma bas namn men olika filnamnstillägg och du vill utföra en operation på en delmängd av dem, kan stag expansioner hjälpa. Här, vi komprimera en delmängd av filer som har ”program” som basnamnet i en ZIP-fil som heter ”source-code.zip.”
Utvecklings kataloger innehåller massor av filer som kommer att ha samma basnamn som huvudprogrammet. Vanligtvis behöver du inte vill säkerhetskopiera eller distribuera filer som ”.o” objektfiler. Detta är ett snyggt sätt att endast omfatta filtyper av intresse.
zip källkod programmet {.c, .h, .css}
Detta kommando kommer att göra en kopia av en fil och append ”.bak” till det, att göra en säkerhetskopia av originalfilen. En intressant punkt att notera är att expansions brace innehåller en kommaseparerad lista, men det första elementet är tom. Om vi inte hade inkluderat kommatecken skulle expansionen inte har ägt rum.
cp stag / nytt / prog-1.c {,. Bak}
ls stag / ny / prog-1.c.bak
För att utföra vissa åtgärder på två filer i olika kataloger, kan vi använda ett stag expansion i sökvägen till filerna.
I det här exemplet innehåller ”brace” katalogen två underkataloger, som kallas ”nya” och en som kallas ”gamla”. De innehåller olika versioner av samma uppsättning källkodsfiler. Vi använder
diff
programmet för att se skillnaderna mellan de två versionerna av ”prog-1.c.”
diff stag / {nytt, gammalt} /prog-1.c
Om du har en standard skelett av kataloger som du behöver för att skapa i början av ett projekt, kan du skapa dem snabbt med stag expansion. De
mkdir
-p
(Moder) alternativet
skapar saknade överordnade kataloger
när ett barn katalog skapas.
mkdir -p {källa, bygga, man, hjälp {/ sidor, / yelp, / bilder}}
träd
Du kan använda brace expansion med
wget
till
ladda ner flera filer
.
I det här kommandot kommer vi att ladda ner filer från två kataloger, som kallas ”test1” och ”test2”. Varje katalog innehåller två filer som kallas ”picture1” och ”picture2.”
wget https://www.URL-of-your-choice.com/test{1,2}/picture{001,002}.jpg
Notering filerna hjälper dig hitta de filer som hämtas och hur
wget
döper filer för att undvika namn krockar med befintliga filer.
ls bild *. *
Omfamna Brace
Det verkar som om brace expansion är en annan av Linux bäst bevarade hemligheter . Många säger att de aldrig har hört talas om brace expansion, medan andra informera mig att det är en av deras favorit kommandoraden tricks.
Ge det ett försök och det bara kan finna sin väg in i din uppsättning kommandoraden go-to trick.