Capisco cosè l espansione delle parentesi graffe , ma non so come farlo al meglio usalo.
Quando lo usi?
Per favore, insegnami alcuni esempi utili e notevoli se hai il tuo suggerimento.
Risposta
Lespansione delle parentesi graffe è molto utile se hai nomi di percorso lunghi. La utilizzo come un modo rapido per eseguire il backup di un file :
cp /a/really/long/path/to/some/file.txt{,.bak}
copierà /a/really/long/path/to/some/file.txt
in /a/really/long/path/to/some/file.txt.bak
Puoi anche usarlo in una sequenza . Una volta lho fatto per scarica molte pagine dal Web:
wget http://domain.com/book/page{1..5}.html
o
for i in {1..100} do #do something 100 times done
Commenti
Answer
Espansione con parentesi graffe è molto utile quando si creano grandi strutture di directory:
mkdir -p dir1/{subdir1,subdir2}/{subsubdir1,subsubdir2}
Questo ti darà
find dir1 -type d dir1 dir1/subdir1 dir1/subdir1/subsubdir1 dir1/subdir1/subsubdir2 dir1/subdir2 dir1/subdir2/subsubdir1 dir1/subdir2/subsubdir2
Potresti anche fare un ulteriore passo avanti e inserire lespansione delle parentesi graffe nellespansione delle parentesi graffe:
mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}
Questo ti darà la stessa struttura di directory dellesempio sopra.
Commenti
- Annidamento è bello, ma il tuo esempio di annidamento (
mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}
) non ‘ in realtà non serve a nessuno scopo. Avresti potuto farlo:mkdir -p dir1/subdir{1,2}/subsubdir{1,2}
. - @iconoclast, ha uno scopo se interpreti
subdir1
esubdir2
in senso non letterale. Sostituiscisubdir1
concat
esubdir2
condog
ad esempio. - @ephsmith: se interpreti ” subdir1 ” come sostituto di ” cat ” e ” subdir2 ” per ” dog “, lesempio di nidificazione non riesce, poiché utilizza la sottodirectory {1,2} e non è presente alcuna stringa che puoi sostituire ” subdir ” con ciò renderà la subdir {1,2} return {cat, dog}.
Risposta
Lo uso quando voglio ridurre la digitazione:
geany /path/to/file1 /path/to/file2 # versus geany /path/to/file{1,2}
Un altro esempio:
wajig install libpam0g-dev libiw-dev libdb-dev # versus wajig install lib{pam0g,iw,db}-dev
Answer
Lo uso per confrontare testare loutput sulloutput di test desiderato durante lo sviluppo. Se il test # 41 fallisce, è facile vedere qual è la differenza tra loutput del test (nel file tests.output / 041) e loutput desiderato (nel file tests.out / 041):
$ diff tests.{out,output}/041
Risposta
Alcuni casi frequenti per me sono:
Per rinominare:
mv myText.{txt,tex}
o
mv myText.tex{,.old}
o
cp myText.tex{,.backup}
(Anche se è meno complicato usare il controllo della versione per le ultime 2 attività.)
Per il confronto (già menzionato):
diff path{1,2}/a.txt
Risposta
Ci sono molte ottime risposte qui, ma nessuna menziona quando non per utilizzare lespansione delle parentesi graffe. Come gli altri risponditori, utilizzo parecchio lespansione delle parentesi graffe sulla riga di comando. Lo uso anche nei miei alias e nelle funzioni poiché posso aspettarmi una shell intelligente.
Non lo uso nei miei script di shell (a meno che non ci sia qualche altra ragione per cui gli script dovrebbe essere bash o zsh, anche se in questi casi è meglio eseguire laggiornamento a un linguaggio di scripting “reale” come perl
o python
). Lespansione delle parentesi graffe è non portabile poiché non è in lo standard della shell POSIX. Anche se funziona nei tuoi /bin/sh
– shebang ed script di shell, non funzionerà su sistemi con /bin/sh
shell (ad es. dash
).
Nel caso di una differenza di una singola cifra, non è necessaria lespansione delle parentesi graffe; sarà sufficiente una classe di caratteri:
Bashism:
diff file{1,2}
Portatile:
diff file[12]
Commenti
- Una differenza è che
file{1,2}
si espanderà sempre afile1 file2
, mentrefile[12]
si espanderà solo ai nomi di file esistenti: ie sefile1
esiste mafile2
non ‘ t,file[12]
si espande solo afile1
. Lespansione[]
è in realtà una versione limitata di?
espansione (e sono chiamate ” espansioni del nome del percorso “). - Corretto, lespansione con parentesi graffa non è shell globbing (noto anche come espansione del nome del percorso). Questo ‘ è un buon richiamo che non ha
Non è stato ancora menzionato: lespansione delle parentesi graffe è migliore per rilevare percorsi inaspettatamente assenti. Puoi anche espandere lespansione delle parentesi graffe.
Rispondi
Dopo aver diviso un file molto grande con
split -b 100m hugeFile.zip part.
supponiamo che sia diviso in 262 parti, in altre parole part.aa
, part.ab
, part.ac
… part.kb
Puoi unire di nuovo quei pezzi nidificando espansioni di parentesi graffe , in questo modo
cat part.{{a..j}{a..z},k{a..b}} > hugeFile.zip
program -f file1 -f file2 -f file3
, puoi eseguireprogram "-f file"{1..3}
program
ottiene tre parole:"-f file1" "-f file2" "-f file3"
, invece di 6:"-f" "file1" "-f" "file2" "-f" "file3"
.for
è un po inutile, dato che puoi scriverefor ((i=1; i<=100; i++))
ed è più efficiente.