Chápu, co je rozšíření závorky , ale nevím, jak nejlépe použijte jej.
Kdy ji použijete?
Naučte mě prosím několik praktických a pozoruhodných příkladů, pokud máte svůj vlastní tip.
Odpovědět
Rozšíření složených závorek je velmi užitečné, pokud máte dlouhé názvy cest. Používám ho jako rychlý způsob zálohování souboru :
cp /a/really/long/path/to/some/file.txt{,.bak}
zkopíruje /a/really/long/path/to/some/file.txt
do /a/really/long/path/to/some/file.txt.bak
Můžete jej také použít v sekvenci . Jednou jsem to udělal stáhněte si spoustu stránek z webu:
wget http://domain.com/book/page{1..5}.html
nebo
for i in {1..100} do #do something 100 times done
Komentáře
Odpověď
Rozšíření složené závorky při vytváření velkých adresářových struktur se velmi hodí:
mkdir -p dir1/{subdir1,subdir2}/{subsubdir1,subsubdir2}
Tím získáte
find dir1 -type d dir1 dir1/subdir1 dir1/subdir1/subsubdir1 dir1/subdir1/subsubdir2 dir1/subdir2 dir1/subdir2/subsubdir1 dir1/subdir2/subsubdir2
Můžete dokonce jít o krok dále a dát rozšíření závorky do rozšíření závorky:
mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}
Tím získáte stejnou adresářovou strukturu jako výše uvedený příklad.
Komentáře
- Vnoření je hezké, ale váš příklad vnoření (
mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}
) ‚ ve skutečnosti neslouží žádnému účelu. Mohli jste to udělat právě takto:mkdir -p dir1/subdir{1,2}/subsubdir{1,2}
. - @iconoclast, slouží to účelu, pokud interpretujete
subdir1
asubdir2
v jiném než doslovném smyslu. Vyměňtesubdir1
zacat
asubdir2
zadog
například. - @ephsmith: pokud interpretujete “ subdir1 “ tak, že zastupujete “ kočka “ a “ subdir2 “ pro “ dog „, pak příklad vnoření selže, protože používá subdir {1,2} a neexistuje žádný řetězec, který byste mohli nahradit “ subdir “ díky tomu se subdir {1,2} vrátí {kočka, pes}.
Odpověď
Používám ho, když chci omezit psaní:
geany /path/to/file1 /path/to/file2 # versus geany /path/to/file{1,2}
Další příklad:
wajig install libpam0g-dev libiw-dev libdb-dev # versus wajig install lib{pam0g,iw,db}-dev
Odpověď
Používám jej k porovnání skutečných testovací výstup na požadovaný testovací výstup během vývoje. Pokud test č. 41 selže, snadno zjistíte, jaký je rozdíl mezi výstupem testu (v souboru tests.output / 041) a požadovaným výstupem (v souboru tests.out / 041):
$ diff tests.{out,output}/041
Odpověď
Některé časté případy pro mě jsou:
K přejmenování:
mv myText.{txt,tex}
nebo
mv myText.tex{,.old}
nebo
cp myText.tex{,.backup}
(Přestože je použití verzí pro poslední 2 úkoly méně komplikované.)
Pro srovnání (již zmíněno):
diff path{1,2}/a.txt
Odpověď
Zde je několik skvělých odpovědí, ale žádná z nich neuvádí, kdy not použít expanzi složených závorek. Stejně jako ostatní odpovídači používám na příkazovém řádku docela dost rozšíření složených závorek. Používám to také ve svých aliasech a funkcích, protože mohu očekávat inteligentní prostředí.
Nepoužívám ho nepoužívám v mých shell skriptech (pokud není nějaký jiný důvod, proč skripty by měl být bash nebo zsh, i když v takových případech je nejlepší upgradovat na „skutečný“ skriptovací jazyk, jako je perl
nebo python
). Rozšíření složené závorky není přenosné , protože není v standard prostředí POSIX. I když to funguje ve vašich /bin/sh
– shebang ed skriptech prostředí, nebude to fungovat v systémech s více odizolovanými /bin/sh
skořápky (např. dash
).
V případě rozdílu jedné číslice nepotřebujete rozšíření složených závorek; postačí třída znaků:
Bashism:
diff file{1,2}
Přenosné:
diff file[12]
Komentáře
- Rozdíl je že
file{1,2}
se vždy rozšíří nafile1 file2
, zatímcofile[12]
se rozšíří pouze na existující názvy souborů: tj. pokudfile1
existuje, alefile2
není ‚ t,file[12]
expanduje pouze nafile1
. Rozšíření[]
je ve skutečnosti omezenou verzí?
expanze (a říká se jim “ rozšíření názvu cesty „). - Správně, rozšíření rovnátka není shell globbing (aka rozšíření názvu cesty). To ‚ je dobré volání, které nemá
o tom ještě nebylo řečeno: rozšíření složených závorek je lepší při zaznamenávání neočekávaně chybějících cest. Můžete také globovat uvnitř expanze složených závorek.
Odpovědět
Po rozdělení velmi velkého souboru pomocí
split -b 100m hugeFile.zip part.
Předpokládejme, že je rozdělena na 262 částí, jinými slovy part.aa
, part.ab
, part.ac
… part.kb
K těmto dílům se můžete znovu připojit vnořením rozšířené závorky , jako je tento
cat part.{{a..j}{a..z},k{a..b}} > hugeFile.zip
program -f file1 -f file2 -f file3
můžete udělatprogram "-f file"{1..3}
program
dostane tři slova:"-f file1" "-f file2" "-f file3"
, místo 6:"-f" "file1" "-f" "file2" "-f" "file3"
.for
je trochu zbytečné, protože můžete psátfor ((i=1; i<=100; i++))
a je to efektivnější.