Quando usi lespansione del tutore?

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

  • Può essere utilizzato anche per la duplicazione di argomenti. Supponiamo che tu abbia un programma che richiede un ‘ -f ‘ argomento per ogni file su cui operare. invece di eseguire program -f file1 -f file2 -f file3, puoi eseguire program "-f file"{1..3}
  • È un peccato. Lho appena scoperto ma ho fatto il backup su percorsi extra lunghi per anni senza sapere cosa. Grazie.
  • @Patrick: non riesce perché program ottiene tre parole: "-f file1" "-f file2" "-f file3", invece di 6: "-f" "file1" "-f" "file2" "-f" "file3".
  • @dogbane: usare lespansione per luso in un ciclo for è un po inutile, dato che puoi scrivere for ((i=1; i<=100; i++)) ed è più efficiente.

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 e subdir2 in senso non letterale. Sostituisci subdir1 con cat e subdir2 con dog 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 a file1 file2, mentre file[12] si espanderà solo ai nomi di file esistenti: ie se file1 esiste ma file2 non ‘ t, file[12] si espande solo a file1. 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.acpart.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 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *