Înțeleg ce este extinderea aparatului , dar nu știu cum să folosește-l.
Când îl folosești?
Te rog să-mi înveți câteva exemple convenabile și remarcabile dacă ai propriul tău sfat.
Răspunde
Extinderea paranteză este foarte utilă dacă aveți nume de căi lungi. Îl folosesc ca o modalitate rapidă de a copia de rezervă a unui fișier :
cp /a/really/long/path/to/some/file.txt{,.bak}
va copia /a/really/long/path/to/some/file.txt
în /a/really/long/path/to/some/file.txt.bak
De asemenea, îl puteți utiliza într-o secvență . Odată am făcut asta pentru a descărcați o mulțime de pagini de pe web:
wget http://domain.com/book/page{1..5}.html
sau
for i in {1..100} do #do something 100 times done
Comentarii
Răspuns
Extindere este foarte util atunci când creați structuri mari de directoare:
mkdir -p dir1/{subdir1,subdir2}/{subsubdir1,subsubdir2}
Acest lucru vă va oferi
find dir1 -type d dir1 dir1/subdir1 dir1/subdir1/subsubdir1 dir1/subdir1/subsubdir2 dir1/subdir2 dir1/subdir2/subsubdir1 dir1/subdir2/subsubdir2
Puteți chiar să faceți un pas mai departe și să puneți expansiunea bretelei în expansiunea bretelei:
mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}
Acest lucru vă va oferi aceeași structură de director ca exemplul de mai sus.
Comentarii
- Cuibărirea este frumoasă, dar exemplul dvs. de cuibărire (
mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}
) nu ‘ nu servesc de fapt niciunui scop. Ați fi putut face acest lucru:mkdir -p dir1/subdir{1,2}/subsubdir{1,2}
. - @iconoclast, are un scop dacă interpretați
subdir1
șisubdir2
în sens non-literal. Înlocuițisubdir1
cucat
șisubdir2
cudog
de exemplu. - @ephsmith: dacă interpretați ” subdir1 ” ca reprezentând ” cat ” și ” subdir2 ” pentru ” dog „, atunci exemplul de cuibare eșuează, deoarece folosește subdir {1,2} și nu există niciun șir pe care să îl puteți înlocui ” subdir ” cu care va face subdir {1,2} return {pisică, câine}.
Răspuns
Îl folosesc când vreau să reduc textul:
geany /path/to/file1 /path/to/file2 # versus geany /path/to/file{1,2}
Un alt exemplu:
wajig install libpam0g-dev libiw-dev libdb-dev # versus wajig install lib{pam0g,iw,db}-dev
Răspuns
îl folosesc pentru a compara actualul ieșire de test la ieșirea de test dorită în timpul dezvoltării. Dacă testul # 41 eșuează, este ușor să vedeți care este diferența dintre ieșirea testului (în fișierul tests.output / 041) și ieșirea dorită (în fișierul tests.out / 041):
$ diff tests.{out,output}/041
Răspuns
Unele cazuri frecvente pentru mine sunt:
Pentru redenumire:
mv myText.{txt,tex}
sau
mv myText.tex{,.old}
sau
cp myText.tex{,.backup}
(Deși este mai puțin murdar să folosești controlul versiunilor pentru ultimele 2 activități.)
Pentru comparare (menționat deja):
diff path{1,2}/a.txt
Răspuns
Există mai multe răspunsuri grozave aici, dar niciunul dintre ele nu menționează când nu pentru a utiliza expansiunea bretelei. La fel ca ceilalți respondenți, eu folosesc destul de mult expansiunea pe linia de comandă. De asemenea, îl folosesc în aliasurile și funcțiile mele, deoarece mă pot aștepta la un shell inteligent.
Nu îl folosesc în scripturile mele shell (cu excepția cazului în care există un alt motiv pentru scripturi ar trebui să fie bash sau zsh, deși în aceste cazuri, cel mai bine este să faceți upgrade la un limbaj de scriptare „real” precum perl
sau python
). Extinderea parantezei nu este portabilă deoarece nu se află în standardul shell POSIX. Chiar dacă funcționează în /bin/sh
– shebang scripturi shell ed, nu va funcționa pe sisteme cu mai multe stripped /bin/sh
cochilii (de ex. dash
).
În cazul unei diferențe dintr-o singură cifră, nu aveți nevoie de extindere a parantezelor; o clasă de caractere va fi suficientă:
Bashism:
diff file{1,2}
Portabil:
diff file[12]
Comentarii
- O diferență este că
file{1,2}
se va extinde întotdeauna lafile1 file2
, în timp cefile[12]
se extinde numai la numele de fișiere existente: adică dacăfile1
există, darfile2
nu ‘ t,file[12]
se extinde la numaifile1
. Extinderea[]
este într-adevăr o versiune restricționată a?
expansiune (și se numesc ” expansiuni de cale „). - Corect, expansiunea bretelei nu este shell globbing (cunoscut și ca extensie de cale). Aceasta ‘ este un bun apel care nu are
nu a fost încă menționat: extinderea bretelei este mai bună pentru a observa căile absente neașteptat Puteți, de asemenea, să intrați în interiorul expansiunii acoladei.
Răspuns
După împărțirea unui fișier foarte mare cu
split -b 100m hugeFile.zip part.
să presupunem că s-a împărțit în 262 bucăți, cu alte cuvinte part.aa
, part.ab
, part.ac
… part.kb
Vă puteți alătura din nou acelor piese cuibărind expansiuni de bretele , astfel
cat part.{{a..j}{a..z},k{a..b}} > hugeFile.zip
program -f file1 -f file2 -f file3
, puteți faceprogram "-f file"{1..3}
program
primește trei cuvinte:"-f file1" "-f file2" "-f file3"
, în loc de 6:"-f" "file1" "-f" "file2" "-f" "file3"
.for
este puțin inutilă, deoarece puteți scriefor ((i=1; i<=100; i++))
și este mai eficient.