web-dev-qa-db-fra.com

Quand utilisez-vous l'expansion de Brace?

Je comprends ce qu'est expansion de Brace est, mais je ne sais pas comment le mieux pour l'utiliser.

Quand l'utilisez-vous?
Veuillez m'apprendre des exemples pratiques et remarquables si vous avez votre propre conseil.

50
Benjamin

L'expansion de BRACE est très utile si vous avez des noms de chemin longue. Je l'utilise comme un moyen rapide de sauvegarder un fichier :

cp /a/really/long/path/to/some/file.txt{,.bak}

va copier /a/really/long/path/to/some/file.txt à /a/really/long/path/to/some/file.txt.bak

Vous pouvez également l'utiliser dans une séquence . Une fois, je l'ai fait pour télécharger de nombreuses pages du Web:

wget http://domain.com/book/page{1..5}.html

ou

for i in {1..100}
do
   #do something 100 times
done
53
dogbane

L'expansion de BRACE est très pratique lors de la création de grandes structures de répertoire:

mkdir -p dir1/{subdir1,subdir2}/{subsubdir1,subsubdir2}

Cela vous donnera

find dir1 -type d
dir1
dir1/subdir1
dir1/subdir1/subsubdir1
dir1/subdir1/subsubdir2
dir1/subdir2
dir1/subdir2/subsubdir1
dir1/subdir2/subsubdir2

Vous pourriez même aller plus loin et mettre l'expansion de la corde en expansion de Brace:

mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}

Cela vous donnera la même structure de répertoire que l'exemple ci-dessus.

34
Christian

Je l'utilise quand je veux réduire la frappe:

geany /path/to/file1 /path/to/file2
# versus
geany /path/to/file{1,2}

Un autre exemple:

wajig install libpam0g-dev libiw-dev libdb-dev
# versus
wajig install lib{pam0g,iw,db}-dev
22
tshepang

Je l'utilise pour comparer la sortie de test réelle à la sortie de test souhaitée pendant le développement. Si le test n ° 41 échoue, il est facile de voir quelle est la différence entre la sortie de test (dans les tests de fichier.Out.Output/041) et la sortie souhaitée (dans les tests de fichier.out/041):

$ diff tests.{out,output}/041
12
Bruce Ediger

Certains cas fréquents pour moi sont:

Pour renommer:

mv myText.{txt,tex}

ou

mv myText.tex{,.old}

ou

cp myText.tex{,.backup}

(Bien que ce soit moins désordonné utiliser le contrôle de la version pour les 2 dernières tâches.)

Pour comparer (déjà mentionné):

diff path{1,2}/a.txt
10

Il y a plusieurs grandes réponses ici, mais aucune d'entre elles ne mentionne quand non utiliser l'expansion de Brace. Comme les autres interrogateurs, j'utilise un peu une expansion de Brace sur la ligne de commande. Je l'utilise également dans mes alias et mes fonctions depuis que je peux m'attendre à une coquille intelligente.

Je fais non Utilisez-le dans mes scripts shell (sauf indication contraire, les scripts devraient être bash ou zsh, cependant, il est préférable de passer à un langage de script "réel" comme Perl ou python). EXPANSION DE BRACE est non portable car il n'est pas dans la norme de coquille POSIX. Même si cela fonctionne dans votre /bin/sh- Shebang Scripts Shell, il ne fonctionnera pas sur des systèmes avec plus dépouillé /bin/sh shells (par exemple dash).

Dans le cas d'une différence d'un chiffre unique, vous n'avez pas besoin d'une expansion de la corde; Une classe de personnages suffira:

Bashism:

diff file{1,2}

Portable:

diff file[12]
4
Adam Katz

Après avoir fractionné un très gros fichier avec

split -b 100m hugeFile.Zip part.

supposons que cela soit divisé en 262 morceaux, en d'autres termes part.aa, part.ab, part.ac ... part.kb

Votre peut rejoindre ces pièces à nouveau en nidifiant Expansions de Brace, comme celui-ci

cat part.{{a..j}{a..z},k{a..b}} > hugeFile.Zip
0
Madacol