Mikor alkalmazza a zárójel-bővítést?

Értem, mi a zárójel-bővítés , de nem tudom, hogyan lehet a legjobban használja.

Mikor használja?
Kérjük, tanítson néhány kényelmes és figyelemre méltó példát, ha van saját tippje.

Válasz

A zárójel kiterjesztése nagyon hasznos, ha hosszú elérési útja van. Használom gyors módként egy fájl biztonsági mentésére :

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

a /a/really/long/path/to/some/file.txt fájlt átmásolja a következőbe: /a/really/long/path/to/some/file.txt.bak

Használhatja sorrendben is . Egyszer ezt tettem rengeteg oldal letöltése a webről:

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

vagy

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

Megjegyzések

  • Ez argumentumok duplikálásához is használható. Tegyük fel, hogy van valamilyen programod, amelyhez ' -f argumentum fájl működni. A program -f file1 -f file2 -f file3 helyett program "-f file"{1..3}
  • ez szégyen. Éppen most fedeztem fel, de évekig extra hosszú utakon csinálom a mentést, anélkül, hogy tudnám rhis-t. Köszönöm.
  • @Patrick: Ez nem sikerül, mert a program három szót kap: "-f file1" "-f file2" "-f file3", a 6 helyett: "-f" "file1" "-f" "file2" "-f" "file3".
  • @dogbane: A bővítés használata egy for hurokban való használatra kissé értelmetlen, mivel írhat for ((i=1; i<=100; i++)) és hatékonyabb.

Válasz

Brace expand nagyon hasznos nagy könyvtárstruktúrák létrehozásakor:

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

Ez megadja

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

Akár egy lépéssel tovább is léphet, és a zárójel-bővítést belehelyezheti a zárójel-bővítésbe:

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

Ez ugyanazt a könyvtárstruktúrát biztosítja, mint a fenti példa.

Megjegyzések

  • A fészkelés szép, de a fészkelési példád (mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}) nem ' valójában semmilyen célt nem szolgál. Ezt megtehette volna: és subdir2 nem szó szerinti értelemben. Cserélje le a subdir1 szöveget a cat és subdir2 kifejezésre a dog például.
  • @ephsmith: ha a " alkönyvtár1 " -t úgy értelmezi, hogy áll a " macska " és " alkönyvtár2 " div id = “c88ba133ad”>

kutya ", akkor a fészkelési példa nem sikerül, mivel az {1,2} alkönyvtárat használja, és nincs olyan karaktersorozat, amelyet kicserélhetne " alkönyvtár " ezzel az {1} alkönyvtár visszatér {macska, kutya}

Válasz

Akkor használom, ha csökkenteni akarom a gépelést:

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

Egy másik példa:

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

Válasz

A tényleges összehasonlításához használom teszt kimenet a kívánt teszt kimenetre a fejlesztés során. Ha a 41-es teszt sikertelen, könnyen belátható, hogy mi a különbség a tesztkimenet (a tests.output / 041 fájlban) és a kívánt kimenet között (a tests.out / 041 fájlban):

$ diff tests.{out,output}/041 

Válasz

Néhány gyakori eset számomra a következő:

Átnevezéshez:

mv myText.{txt,tex} 

vagy

mv myText.tex{,.old} 

vagy

cp myText.tex{,.backup} 

(Bár kevésbé zavaros a verziókezelést használni az utolsó 2 feladatnál.)

Összehasonlításhoz (már említettem):

diff path{1,2}/a.txt 

Válasz

Több remek válasz van itt, de egyikük sem említi, ha not a zárójel kiterjesztésének használatához. A többi válaszadóhoz hasonlóan én is eléggé alkalmazom a kapcsos zárójelet a parancssorban. Az álneveimben és a funkcióimban is használom, mivel számíthatok egy intelligens héjra.

nem használom a shell szkriptjeimben (hacsak nincs más oka a parancsfájloknak) bash vagy zsh legyen, bár ezekben az esetekben a legjobb egy “igazi” szkriptnyelvre frissíteni, például perl vagy python ). A zárójel kibővítése nem hordozható mivel nincs benne a POSIX shell szabvány. Még akkor is, ha a /bin/sh shebang ed shell parancsfájljaiban működik, még több lecsupaszított /bin/sh kagyló (pl. dash).

Egyszámjegyű különbség esetén nincs szükség zárójel-bővítésre, elegendő egy karakterosztály:

basizmus:

diff file{1,2} 

Hordozható:

diff file[12] 

Megjegyzések

  • Különbség van hogy a file{1,2} mindig file1 file2 -re bővül, míg a file[12] csak a meglévő fájlnevekre bővül: azaz ha létezik file1, de file2 nem ' t, file[12] csak file1 -re bővül. A [] kiterjesztés valóban a ? bővítés (és ezeket " elérési út bővítéseknek hívják ").
  • Helyes, a zárójel kiterjesztése nem héj globbing (más néven útvonalnév-bővítés). Ez ' olyan jó hívás, amely nem rendelkezik

    még nem igazán említettük: a zárójel-bővítés jobban megfelel a váratlanul hiányzó útvonalaknak. Globalizálhatja a zárójel kiterjesztését is.

Válasz

Miután felosztott egy nagyon nagy fájlt a következővel:

split -b 100m hugeFile.zip part. 

tegyük fel, hogy 262 darabra oszlik, más szóval part.aa, part.ab, part.acpart.kb

Ezeket a darabokat újra összekapcsolhatja a következővel: zárójel-bővítések , mint ez

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

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük