Capisco cos'è l' espansione del rinforzo , ma non so come usarlo al meglio.
Quando lo usi?
Ti prego di insegnarmi alcuni esempi convenienti e notevoli se hai il tuo consiglio.
Capisco cos'è l' espansione del rinforzo , ma non so come usarlo al meglio.
Quando lo usi?
Ti prego di insegnarmi alcuni esempi convenienti e notevoli se hai il tuo consiglio.
Risposte:
L'espansione del controvento è molto utile se si hanno nomi di percorsi lunghi. Lo uso come 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
su/a/really/long/path/to/some/file.txt.bak
Puoi anche usarlo in una sequenza . Una volta l'ho fatto per scaricare 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
program
ottiene tre parole: "-f file1" "-f file2" "-f file3"
invece di 6: "-f" "file1" "-f" "file2" "-f" "file3"
.
for
ciclo è un po 'inutile, poiché puoi scrivere for ((i=1; i<=100; i++))
ed è più efficiente.
L'espansione del controvento è molto utile quando si creano strutture di directory di grandi dimensioni:
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 mettere l'espansione del controvento nell'espansione del controvento:
mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}
Questo ti darà la stessa struttura di directory dell'esempio sopra.
mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}
) in realtà non ha alcuno scopo. Si potrebbe avere appena fatto questo: mkdir -p dir1/subdir{1,2}/subsubdir{1,2}
.
subdir1
e subdir2
in senso non letterale. Sostituisci subdir1
con cat
e subdir2
con dog
per esempio.
Lo uso per confrontare l'output del test effettivo con l'output del test desiderato durante lo sviluppo. Se il test n. 41 fallisce, è facile vedere quale sia la differenza tra l'output del test (nel file test.output / 041) e l'output desiderato (nel file test.out / 041):
$ diff tests.{out,output}/041
Alcuni casi frequenti per me sono:
Per rinominare:
mv myText.{txt,tex}
o
mv myText.tex{,.old}
o
cp myText.tex{,.backup}
(Sebbene sia meno complicato utilizzare il controllo versione per le ultime 2 attività.)
Per il confronto (già menzionato):
diff path{1,2}/a.txt
Ci sono molte grandi risposte qui, ma nessuna di esse menziona quando non usare l'espansione del controvento. Come gli altri risponditori, uso un po 'l'espansione della parentesi sulla riga di comando. Lo uso anche nei miei alias e funzioni poiché posso aspettarmi una shell intelligente.
Non lo uso nei miei script di shell (a meno che non ci siano altri motivi per cui gli script dovrebbero essere bash o zsh, anche se in questi casi è meglio passare a un linguaggio di script "reale" come perl
o python
). L'espansione del controvento non è portatile poiché non è nello standard shell POSIX. Anche se funziona nella vostra /bin/sh
- Shebang script di shell ed, non funzionerà su sistemi con più spogliato /bin/sh
conchiglie (per esempio dash
).
Nel caso di una differenza di una sola cifra, non è necessario l'espansione del controvento; sarà sufficiente una classe di caratteri:
da bash:
diff file{1,2}
Portatile:
diff file[12]
file{1,2}
si espanderà sempre a file1 file2
, mentre si file[12]
espande solo ai nomi di file esistenti: cioè se file1
esiste ma file2
non si file[12]
espande a file1
solo. L' []
espansione è in realtà una versione limitata ?
dell'espansione (e sono chiamati "espansioni del percorso").
program -f file1 -f file2 -f file3
, puoi farloprogram "-f file"{1..3}