Milloin käytät ahdinlaajennusta?

Ymmärrän mikä aaltosulkeen laajennus on, mutta en tiedä miten käytä sitä.

Milloin käytät sitä?
Opeta minulle käteviä ja merkittäviä esimerkkejä, jos sinulla on oma vinkki.

Vastaa

Aaltosulkeuden laajentaminen on erittäin hyödyllistä, jos sinulla on pitkät polunimet. Käytän sitä nopeana tapana varmuuskopioida tiedosto :

cp /a/really/long/path/to/some/file.txt{,.bak} 

kopioi /a/really/long/path/to/some/file.txt tiedostoon /a/really/long/path/to/some/file.txt.bak

Voit käyttää sitä myös -järjestyksessä . Tein kerran sen lataa paljon sivuja verkosta:

wget http://domain.com/book/page{1..5}.html 

tai

for i in {1..100} do #do something 100 times done 

kommentit

  • Tätä voidaan käyttää myös argumenttien kopiointiin. Oletetaan, että sinulla on jokin ohjelma, joka vaatii ’ -f ’ argumentti jokaiselle tiedosto toimimaan. Sen sijaan, että tekisit program -f file1 -f file2 -f file3, voit tehdä program "-f file"{1..3}
  • Tämä on sääli. Löysin sen juuri, mutta teen varmuuskopioinnin erityisen pitkillä poluilla vuosia tuntematta rhis. Kiitos.
  • @Patrick: Se epäonnistuu, koska program saa kolme sanaa: "-f file1" "-f file2" "-f file3" eikä 6: "-f" "file1" "-f" "file2" "-f" "file3".
  • @dogbane: Laajennuksen käyttäminen for -silmukassa on hieman turhaa, koska voit kirjoittaa for ((i=1; i<=100; i++)) ja se on tehokkaampaa.

Vastaa

Ahdinlaajennus on erittäin kätevä, kun luot suuria hakemistorakenteita:

mkdir -p dir1/{subdir1,subdir2}/{subsubdir1,subsubdir2} 

Tämä antaa sinulle

find dir1 -type d dir1 dir1/subdir1 dir1/subdir1/subsubdir1 dir1/subdir1/subsubdir2 dir1/subdir2 dir1/subdir2/subsubdir1 dir1/subdir2/subsubdir2 

Voit jopa mennä askeleen pidemmälle ja laittaa aaltosulkeuden laajennuksen aaltosulkeuden laajentamiseen:

mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}} 

Tämä antaa sinulle saman hakemistorakenteen kuin yllä oleva esimerkki.

Kommentit

  • Pesiminen on mukavaa, mutta pesimäesimerkkisi (mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}) ei ’ ei todellakaan palvele mitään tarkoitusta. Olisit voinut vain tehdä tämän: mkdir -p dir1/subdir{1,2}/subsubdir{1,2}.
  • @ikonoclast, sillä on tarkoitus, jos tulkitset subdir1 ja subdir2 ei-kirjaimellisessa mielessä. Korvaa subdir1 sanoilla cat ja subdir2 sanoilla dog.
  • @ephsmith: jos tulkitset ” alihakemiston1 ” seisomaan ” cat ” ja ” alihakemisto2 ” kohteelle ” koira ”, niin pesintäesimerkki epäonnistuu, koska se käyttää alihakemistoa {1,2}, eikä korvattavaa merkkijonoa ole ” alihakemisto ”, joka saa alihakemiston {1,2} palauttamaan {kissa, koira}.

vastaus

Käytän sitä, kun haluan vähentää kirjoittamista:

geany /path/to/file1 /path/to/file2 # versus geany /path/to/file{1,2} 

Toinen esimerkki:

wajig install libpam0g-dev libiw-dev libdb-dev # versus wajig install lib{pam0g,iw,db}-dev 

vastaus

Käytän sitä vertaamaan todellista testitulos haluttuun testitulokseen kehityksen aikana. Jos testi # 41 epäonnistuu, on helppo nähdä, mikä ero testilähdön (tiedostotests.output / 041) ja halutun tulosteen (tiedostotests.out / 041) välillä on:

$ diff tests.{out,output}/041 

vastaus

Joitakin yleisiä tapauksia minulle ovat:

Uudelleennimeämiselle:

mv myText.{txt,tex} 

tai

mv myText.tex{,.old} 

tai

cp myText.tex{,.backup} 

(Vaikka versionhallinnan käyttäminen viimeisissä kahdessa tehtävässä on vähemmän sotkuista.)

Vertailuun (jo mainittu):

diff path{1,2}/a.txt 

Vastaus

Täällä on useita hyviä vastauksia, mutta yksikään niistä ei mainitse, kun not käyttää aaltosulkeutta. Kuten muutkin vastaajat, käytän komentorivillä asteikkolaajennusta melko vähän. Käytän sitä myös aliaksissani ja toiminnoissani, koska voin odottaa älykästä kuorta.

En käytä sitä shell-komentosarjoissani (ellei skripteissä ole jokin muu syy pitäisi olla bash tai zsh, vaikka näissä tapauksissa on parasta päivittää ”todelliseksi” komentosarjakieleksi, kuten perl tai python ). Ahdinlaajennus ei ole ei kannettava koska se ei ole POSIX-kuoristandardi. Vaikka se toimii /bin/sh shebang ed-komentosarjakomentojesi kanssa, se ei toimi järjestelmissä, joissa on enemmän riisuttuja /bin/sh kuoret (esim. dash).

Jos kyseessä on yksinumeroinen luku, et tarvitse ahdinlaajennusta; merkkiluokka riittää:

basismi:

diff file{1,2} 

Kannettava:

diff file[12] 

Kommentit

  • Ero on että file{1,2} laajenee aina muotoon file1 file2, kun taas file[12] laajenee vain olemassa oleviin tiedostonimiin eli jos file1 on olemassa, mutta file2 ei ’ t, file[12] laajenee vain file1. [] -laajennus on todella rajoitettu versio ? laajennus (ja niitä kutsutaan ” polun laajennuksiksi ”).
  • Oikea, aaltosulkeuden laajennus ei ole kuori heiluttaa (alias polunimen laajennus). Tämä ’ on hyvä kutsu, joka ei ole

    ei todellakaan ole vielä mainittu: aaltosulkeuden laajentaminen on parempi huomata odottamattomasti puuttuvat polut. Voit myös liikkua aaltosulkeiden laajennuksen sisällä.

Vastaa

Erittäin suuren tiedoston jakamisen jälkeen

split -b 100m hugeFile.zip part. 

Oletetaan, että se jaetaan 262 osaan, toisin sanoen part.aa, part.ab, part.acpart.kb

Voit liittyä noihin kappaleisiin uudelleen pesimällä ahdinlaajennukset , kuten tämä

cat part.{{a..j}{a..z},k{a..b}} > hugeFile.zip 

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *