Brace-expansie is een nuttige techniek om lijsten van snaren te genereren die kunnen worden gebruikt in scripts en aliassen en op de opdrachtregel Linux. Bespaar tijd en vermijd fouten door minder te typen.
Brace expansie
Voor de bash shell voert een commando uit In een terminalvenster of een regel in een script controleert het of het elke vervangingen op de opdracht moet uitvoeren. Variabele namen worden vervangen door hun waarden, aliassen worden vervangen door de opdrachten die ze stengens voor zijn, en elke expansie wordt uitgevoerd. Brace-uitbreiding is een vorm van expansie die door bash wordt ondersteund.
Brace-expansie is verkrijgbaar in moderne schelpen, maar het missen misschien in sommige oude schalen. Als u brace-expansie in scripts gaat gebruiken, zorg er dan voor dat u een schaal aanneemt die brace-expansie ondersteunt, zoals bash:
We gebruiken bash voor onze voorbeelden.
Het genereren van lijsten van snaren lijkt misschien meer een nieuwigheid dan een voordeel, maar het biedt wel enige functionaliteit die tijd en toetsaanslagen kan besparen. Vaak kan het een eenvoudige en elegante oplossing bieden voor een probleem of vereiste.
Eenvoudige expansies
Een brace-expansie is opgenomen tussen een paar beugels "{}". Het kan een lijst zijn van door komma's gescheiden items of een bereikspecificator. Spaties zijn niet toegestaan in de beugels, tenzij u de tekenreeks in aanhalingstekens hebt ingepakt "
"
. "
Voor een door komma's gescheiden lijst neemt het expansieproces elk element op beurt en geeft deze door op de oproepopdracht. In dit voorbeeld is het
echo
dat gewoon
drukt ze af in het terminalvenster
. Merk op dat de komma's worden genegeerd.
Echo {One, Two, Three, Four}
Een lijst kan woorden of cijfers zijn.
echo {1,2,3,4}
De volgorde van de lijstelementen is volledig willekeurig.
Echo (4,23,1)
Een uitbreidingsbereik heeft een begin en een eindkarakter verbonden met twee perioden "
..
"Zonder enige whitespace. Alle elementen van ontbrekende lijst worden automatisch door de uitbreiding verstrekt, zodat het volledige bereik van startkarakter tot eindkarakter is gemaakt.
Dit drukt de cijfers van 1 tot 10 af.
ECHO {1..10}
De nummering is willekeurig. Het hoeft niet bij één te beginnen.
ECHO {3..12}
Rekenes kunnen worden opgegeven, zodat ze achteruit zijn. Dit genereert een lijst van vijf naar beneden.
ECHO {5..1}
Ranges kunnen negatieve getallen omvatten.
echo {4 ..- 4}
Zoals we eerder hebben opgemerkt, heeft een bereik een begin en een einde karakter . Het hoeft geen nummer te zijn. Het kan een brief zijn.
echo {q..v}
De letters kunnen ook achteruit lopen.
echo {f..a}
Brace-expansie met lussen gebruiken
U kunt brace-expansie gebruiken met reeksen in loops in scripts.
Voor i in {3..7}
doen
echo $ i
gedaan
Brace Expansion Ranges kunt u tekens gebruiken als de lusvariabele.
Voor i in {m..q}
doen
echo $ i
gedaan
Loops worden meestal gebruikt in scripts, maar er is niets om te voorkomen dat je ze in de opdrachtregel typt om te zien wat er zal gebeuren.
Voor I in {3..7}; DO ECHO $ I; gedaan
Voor I in {m..q}; DO ECHO $ I; gedaan
Samenvoegen en nesten
Twee aangrenzende expansies handelen niet onafhankelijk van de ander. Ze interopereren. Elk element in de eerste expansie wordt door elk element in de tweede uitbreiding gehandeld.
echo {q..v} {1..3}
Uitbreidingen kunnen ook worden genest. Een geneste expansie zal op het element handelen dat onmiddellijk voorafgaat aan het.
ECHO {PART-1, DEEL-2 {A, B, C, D}, PART-3}
U kunt ook expansies nest door een komma-gescheiden lijst met bereikuitbreidingen te maken.
echo {{5..0}, {1..5}}
Preambule en PostScript
U kunt tekst voor en na een brace-expansie plaatsen om die tekst in de resultaten van de uitbreiding te hebben. Tekst voor een expansie wordt de preambule genoemd, terwijl de tekst die achter een brace-uitbreiding wordt geplaatst het PostScript wordt genoemd.
Deze opdracht gebruikt een preambule.
ECHO HOOFDSTUK {1..3}
Dit voorbeeld gebruikt een PostScript:
echo {inhoud, papier, bilbiografie} .md
En deze opdracht gebruikt beide.
Echo Hoofdstuk- {1..4} .md
Breiding van bestandsnamen en -mappen
Zoals je waarschijnlijk al hebt geraden, is een van de belangrijkste toepassingen van brace-uitbreidingen om bestands- en directory-namen te maken die aan andere opdrachten kunnen worden doorgegeven. We gebruiken
echo
Als een handige manier om precies te zien wat er gebeurt wanneer een uitbreiding wordt geactiveerd. U kunt een opdracht vervangen die bestandsnamen of mapnamen als invoer neemt en brace-expansie ermee gebruikt.
Te snel
Maak een aantal bestanden
, gebruik maken van
aanraken
:
Tik op Bestand- {1..4} .txt
LS * .txt
Als u veel bestanden hebt met dezelfde basisnaam, maar verschillende bestandsextensies en wilt u een bewerking uitvoeren op een subset van hen, kunnen brace-uitbreidingen helpen. Hier comprimeren we een subset van bestanden met "Programma" als Basename in een ZIP-bestand met de naam "Source-code.zip".
Ontwikkelingsdirectory's bevatten veel bestanden die dezelfde Basename hebben als uw hoofdprogramma. Meestal wilt u geen back-up maken van bestanden zoals ".o" -objecten. Dit is een nette manier om alleen de bestandssoorten op te nemen.
ZIP-broncodeprogramma {.c, .h, .css}
Deze opdracht maakt een kopie van een bestand en voegt u toe ".bak" aan, waardoor een back-upkopie van het oorspronkelijke bestand is. Een interessant punt om op te merken is dat de brace-expansie een komma-gescheiden lijst bevat, maar het eerste element is leeg. Als we de komma niet hadden opgenomen, zou de uitbreiding niet hebben plaatsgevonden.
CP BRACE / NIEUW / PROG-1.C {,. BAK}
LS BRACE / NIEUW / PROG-1.C.Bak
Om een actie uit te voeren op twee bestanden in verschillende mappen, kunnen we een brace-expansie in het pad naar de bestanden gebruiken.
In dit voorbeeld bevat de map "Brace" twee subdirectory's, een "nieuw" genoemd en een "oud" genoemd. Ze bevatten verschillende versies van dezelfde set broncodebestanden. We gebruiken de
diff
programma om de verschillen tussen de twee versies van "PROG-1.C" te zien ".
Diff Brace / {NIEUW, OUD} /PROG-1.C
Als u een standaard skelet van mappen hebt die u aan het begin van een project moet maken, kunt u ze snel maken met behulp van brace-expansie. De
Mkdir
-P
(ouder) optie
Creëert eventuele ontbrekende oudermappen
Wanneer een kindergids is gemaakt.
MKDIR -P {bron, build, man, help {/ pagina's, / yelp, / afbeeldingen}}
Boom
Je kunt brace-expansie gebruiken met
wauwen
tot
Download meerdere bestanden
.
In deze opdracht gaan we bestanden downloaden van twee mappen, genaamd "Test1" en "Test2." Elke map bevat twee bestanden met de naam "Picture1" en "Picture2."
Wget https://www.url-of-your-choice.com/test prijzigingen
![]()
De lijst met de bestanden toont u de bestanden die zijn opgehaald en hoe
wauwenHernoem de bestanden om te voorkomen dat naambotsingen met bestaande bestanden worden gebruikt.LS Picture *. *
![]()
Omarmen de brace
Het lijkt erop dat brace-expansie een ander is Linux's best bewaarde geheimen . Veel mensen vertellen me dat ze nog nooit van brace-expansie hebben gehoord, terwijl anderen me informeren dat het een van hun favoriete opdrachtregeltrucs is.
Geef het eens en het kan gewoon zijn weg vinden in je set opdrachtregel-naar-trucs.