Si të përdorni Brace Expansion në Bash Shell të Linux
Zgjerimi i Brace është një teknikë e dobishme për të gjeneruar lista të vargjeve që mund të përdoren në skriptet dhe pseudonimet dhe në linjën e komandës Linux. Kurseni kohë dhe shmangni gabimet duke shkruar më pak.
Zgjerimi i mbajtësit
Përpara se guaska Bash të ekzekutojë një komandë në një dritare terminali ose një rresht në një skript, ajo kontrollon nëse duhet të kryejë ndonjë zëvendësim në komandë. Emrat e variablave zëvendësohen nga vlerat e tyre, pseudonimet zëvendësohen nga komandat për të cilat janë stenografi, dhe çdo zgjerim kryhet. Zgjerimi i mbajtësit është një formë zgjerimi e mbështetur nga Bash.
Zgjerimi i mbajtësit është i disponueshëm në predha moderne, por mund të mungojë në disa predha të vjetra. Nëse do të përdorni zgjerimin e kllapave në skriptet, sigurohuni që të thirrni një guaskë që mbështet zgjerimin e mbajtësit, siç është Bash:
#!/bin/bash
Ne do të përdorim Bash për shembujt tanë.
Krijimi i listave të vargjeve mund të duket më shumë një risi sesa një përfitim, por ofron disa funksionalitete që mund të kursejnë kohë dhe tastierë. Shpesh, mund të ofrojë një zgjidhje të thjeshtë dhe elegante për një problem ose kërkesë.
Zgjerime të thjeshta
Një zgjerim mbajtëse është i përfshirë midis një çifti kllapash {}. Mund të jetë një listë artikujsh të ndara me presje ose një specifikues i diapazonit. Hapësirat nuk lejohen brenda kllapave nëse nuk e keni mbështjellë vargun me thonjëza \
.
Për një listë të ndarë me presje, procesi i zgjerimit merr çdo element me radhë dhe ia kalon komandës thirrëse. Në këtë shembull, është echo
që thjesht i printon ato në dritaren e terminalit. Vini re se presjet nuk merren parasysh.
echo {one,two,three,four}
Lista mund të jetë fjalë ose shifra.
echo {1,2,3,4}
Renditja e elementeve të listës është krejtësisht arbitrare.
echo (4,2,3,1)
Gama e zgjerimit ka një karakter fillimi dhe një mbarimi të lidhur me dy pika ..
pa asnjë hapësirë të bardhë. Të gjithë elementët e listës që mungojnë sigurohen automatikisht nga zgjerimi në mënyrë që të krijohet i gjithë diapazoni nga karakteri i fillimit deri tek karakteri i fundit.
Kjo do të printojë shifrat nga 1 në 10.
echo {1..10}
Numërimi është arbitrar. Nuk ka pse të fillojë në një.
echo {3..12}
Vargjet mund të specifikohen në mënyrë që ato të shkojnë prapa. Kjo do të gjenerojë një listë nga pesë në një.
echo {5..1}
Vargjet mund të përfshijnë numra negativë.
echo {4..-4}
Siç e theksuam më parë, një varg ka një karakter fillimi dhe një fundi. Nuk duhet të jetë një numër. Mund të jetë një letër.
echo {q..v}
Shkronjat gjithashtu mund të shkojnë prapa.
echo {f..a}
Përdorimi i zgjerimit të mbajtësit me sythe
Mund të përdorni zgjerimin e mbajtësit me vargje në sythe në skriptet.
for i in {3..7}
do
echo $i
done
Diapazonet e zgjerimit të Brace ju lejojnë të përdorni karaktere si variabël të ciklit.
for i in {m..q}
do
echo $i
done
Sythet zakonisht përdoren në skriptet, por nuk ka asgjë që t'ju ndalojë t'i shtypni ato në vijën e komandës për të parë se çfarë do të ndodhë.
for i in {3..7}; do echo $i; done
for i in {m..q}; do echo $i; done
Lidhja dhe foleja
Dy zgjerime ngjitur nuk veprojnë në mënyrë të pavarur njëri pas tjetrit. Ata ndërveprojnë. Çdo element në zgjerimin e parë veprohet nga secili element në zgjerimin e dytë.
echo {q..v}{1..3}
Zgjerimet gjithashtu mund të futen me fole. Një zgjerim i mbivendosur do të veprojë në elementin menjëherë para tij.
echo {part-1,part-2{a,b,c,d},part-3}
Mund të futni gjithashtu zgjerime duke krijuar një listë të kufizuar me presje të zgjerimeve të diapazonit.
echo {{5..0},{1..5}}
Preambula dhe passhkrimi
Mund të vendosni tekst para dhe pas një zgjerimi të kllapave për ta përfshirë atë tekst në rezultatet e zgjerimit. Teksti i vendosur përpara një zgjerimi quhet parathënie, ndërsa teksti i vendosur pas një zgjerimi të kllapave quhet passhkrim.
Kjo komandë përdor një preambulë.
echo chapter{1..3}
Ky shembull përdor një postscript:
echo {contents,paper,bilbiography}.md
Dhe kjo komandë përdor të dyja.
echo chapter-{1..4}.md
Zgjerimi i emrave dhe drejtorive të skedarëve
Siç ndoshta e keni marrë me mend deri tani, një nga përdorimet kryesore të zgjerimeve të kllapave është krijimi i emrave të skedarëve dhe drejtorive që mund t'u kalohen komandave të tjera. Ne kemi përdorur echo
si një mënyrë të përshtatshme për të parë saktësisht se çfarë ndodh kur aktivizohet një zgjerim. Ju mund të zëvendësoni çdo komandë që merr emrat e skedarëve ose emrat e drejtorive si hyrje dhe të përdorni zgjerimin e kllapave me të.
Për të krijuar shpejt disa skedarë, përdorni prek
:
touch file-{1..4}.txt
ls *.txt
Nëse keni shumë skedarë me të njëjtin emër bazë, por shtesa të ndryshme skedari dhe dëshironi të kryeni një operacion në një nëngrup të tyre, zgjerimet e kllapave mund të ndihmojnë. Këtu, ne po kompresojmë një nëngrup skedarësh që kanë programin si emër bazë në një skedar ZIP të quajtur source-code.zip.
Drejtoritë e zhvillimit përmbajnë shumë skedarë që do të kenë të njëjtin emër bazë si programi juaj kryesor. Zakonisht, ju nuk dëshironi të rezervoni ose shpërndani skedarë si skedarët e objekteve .o. Kjo është një mënyrë e pastër për të përfshirë vetëm llojet e skedarëve me interes.
zip source-code program{.c,.h,.css}
Kjo komandë do të bëjë një kopje të një skedari dhe do t'i shtojë atij .bak, duke bërë një kopje rezervë të skedarit origjinal. Një pikë interesante për t'u theksuar është se zgjerimi i kllapave përmban një listë të ndarë me presje, por elementi i parë është bosh. Nëse nuk do të kishim përfshirë presjen, zgjerimi nuk do të kishte ndodhur.
cp brace/new/prog-1.c{,.bak}
ls brace/new/prog-1.c.bak
Për të kryer disa veprime në dy skedarë në drejtori të ndryshme, mund të përdorim një zgjerim të kllapave në rrugën drejt skedarëve.
Në këtë shembull, drejtoria brace përmban dy nëndrejtori, një i quajtur i ri dhe një i quajtur i vjetër. Ato përmbajnë versione të ndryshme të të njëjtit grup skedarësh të kodit burimor. Ne do të përdorim programin diff
për të parë ndryshimet midis dy versioneve të prog-1.c.
diff brace/{new,old}/prog-1.c
Nëse keni një skelet standard drejtorish që duhet të krijoni në fillim të një projekti, mund t'i krijoni ato shpejt duke përdorur zgjerimin e mbajtësit. Opsioni mkdir
-p
(prind) krijon çdo direktori prindi që mungon kur krijohet një direktori fëmijësh.
mkdir -p {source,build,man,help{/pages,/yelp,/images}}
tree
Mund të përdorni zgjerimin e mbajtësit me wget
për të shkarkuar skedarë të shumtë.
Në këtë komandë, ne do të shkarkojmë skedarë nga dy drejtori, të quajtura test1 dhe test2. Çdo direktori mban dy skedarë të quajtur picture1 dhe picture2.
wget https://www.URL-of-your-choice.com/test{1,2}/picture{001,002}.jpg
Listimi i skedarëve ju tregon skedarët që janë marrë dhe se si wget
i riemërton skedarët për të shmangur përplasjet e emrave me skedarët ekzistues.
ls picture*.*
Përqafoni Brace
Provojeni dhe thjesht mund të gjejë rrugën e saj në grupin tuaj të trukimeve të linjës së komandës.