in

Comment utiliser l’extension Brace dans le shell Bash de Linux

L’expansion des accolades est une technique utile pour générer des listes de chaînes pouvant être utilisées dans des scripts et des alias et sur la ligne de commande Linux. Gagnez du temps et évitez les erreurs en tapant moins.

Extension de l’attelle

Avant le shell Bash exécute une commande dans une fenêtre de terminal ou une ligne dans un script, il vérifie s’il doit effectuer des substitutions sur la commande. Les noms de variables sont remplacés par leurs valeurs, les alias sont remplacés par les commandes pour lesquelles ils sont abrégés et toute expansion est effectuée. L’extension Brace est une forme d’extension prise en charge par Bash.

L’extension Brace est disponible dans les shells modernes, mais elle peut être absente de certains anciens shells. Si vous envisagez d’utiliser l’expansion des accolades dans les scripts, assurez-vous d’appeler un shell qui prend en charge l’expansion des accolades, tel que Bash :

Nous utiliserons Bash pour nos exemples.

La génération de listes de chaînes peut sembler plus une nouveauté qu’un avantage, mais elle offre certaines fonctionnalités qui peuvent économiser du temps et des frappes. Souvent, il peut fournir une solution simple et élégante à un problème ou à une exigence.

Extensions simples

Une extension d’accolade est contenue entre une paire d’accolades « {} ». Il peut s’agir d’une liste d’éléments séparés par des virgules ou d’un spécificateur de plage. Les espaces ne sont pas autorisés à l’intérieur des accolades à moins que vous n’ayez mis la chaîne entre guillemets « ".  »

Pour une liste séparée par des virgules, le processus d’expansion prend chaque élément à tour de rôle et le transmet à la commande appelante. Dans cet exemple, c’est echo qui les imprime simplement dans la fenêtre du terminal. Notez que les virgules sont ignorées.

echo {one,two,three,four}

Une liste peut être des mots ou des chiffres.

echo {1,2,3,4}

L’ordre des éléments de la liste est complètement arbitraire.

echo (4,2,3,1)

Une plage d’extension a un caractère de début et un caractère de fin liés à deux points ” ..  » sans aucun espace. Tous les éléments de liste manquants sont fournis automatiquement par l’expansion de sorte que toute la plage du caractère de début au caractère de fin soit créée.

Cela imprimera les chiffres de 1 à 10.

echo {1..10}

La numérotation est arbitraire. Il n’a pas besoin de commencer à un.

echo {3..12}

Les plages peuvent être spécifiées pour qu’elles s’exécutent en arrière. Cela générera une liste de cinq à un.

echo {5..1}

Les plages peuvent inclure des nombres négatifs.

echo {4..-4}

Comme nous l’avons souligné précédemment, une plage a un caractère de début et de fin. Ce n’est pas forcément un numéro. Cela peut être une lettre.

echo {q..v}

Les lettres peuvent également revenir en arrière.

echo {f..a}

Utilisation de l’extension d’accolade avec des boucles

Vous pouvez utiliser l’expansion des accolades avec des plages en boucles dans les scripts.

for i in {3..7}
do
   echo $i
done

Les plages d’extension des accolades vous permettent d’utiliser des caractères comme variable de boucle.

for i in {m..q}
do
   echo $i
done

Les boucles sont généralement utilisées dans les scripts, mais rien ne vous empêche de les saisir dans la ligne de commande pour voir ce qui se passera.

for i in {3..7}; do echo $i; done

for i in {m..q}; do echo $i; done

Concaténation et imbrication

Deux extensions adjacentes n’agissent pas indépendamment l’une après l’autre. Ils interagissent. Chaque élément du premier développement subit l’action de chaque élément du deuxième développement.

echo {q..v}{1..3}

Les extensions peuvent également être imbriquées. Une expansion imbriquée agira sur l’élément qui la précède immédiatement.

echo {part-1,part-2{a,b,c,d},part-3}

Vous pouvez également imbriquer des extensions en créant une liste d’extensions de plage délimitée par des virgules.

echo {{5..0},{1..5}}

Préambule et Post-scriptum

Vous pouvez placer du texte avant et après un développement d’accolades pour que ce texte soit inclus dans les résultats du développement. Le texte placé devant une extension est appelé préambule, tandis que le texte placé derrière une extension d’accolade est appelé postscript.

Cette commande utilise un préambule.

echo chapter{1..3}

Cet exemple utilise un post-scriptum :

echo {contents,paper,bilbiography}.md

Et cette commande utilise les deux.

echo chapter-{1..4}.md

Extension des noms de fichiers et des répertoires

Comme vous l’avez probablement deviné maintenant, l’une des principales utilisations des extensions d’accolades est de créer des noms de fichiers et de répertoires qui peuvent être transmis à d’autres commandes. nous avons utilisé echo comme moyen pratique de voir exactement ce qui se passe lorsqu’une extension est déclenchée. Vous pouvez substituer n’importe quelle commande qui prend des noms de fichiers ou de répertoires en entrée et utiliser l’extension des accolades avec.

Pour créer rapidement des fichiers, utilisez touch:

touch file-{1..4}.txt
ls *.txt

Si vous avez de nombreux fichiers avec le même nom de base mais des extensions de fichier différentes et que vous souhaitez effectuer une opération sur un sous-ensemble d’entre eux, les extensions d’accolades peuvent vous aider. Ici, nous compressons un sous-ensemble de fichiers dont le nom de base est « programme » dans un fichier ZIP appelé « code-source.zip ».

Les répertoires de développement contiennent de nombreux fichiers qui auront le même nom de base que votre programme principal. En règle générale, vous ne souhaitez pas sauvegarder ou distribuer des fichiers tels que des fichiers objets « .o ». C’est un moyen pratique d’inclure uniquement les types de fichiers qui vous intéressent.

zip source-code program{.c,.h,.css}

Cette commande fera une copie d’un fichier et y ajoutera « .bak », créant une copie de sauvegarde du fichier d’origine. Un point intéressant à noter est que l’expansion des accolades contient une liste séparée par des virgules, mais le premier élément est vide. Si nous n’avions pas inclus la virgule, l’expansion n’aurait pas eu lieu.

cp brace/new/prog-1.c{,.bak}
ls brace/new/prog-1.c.bak

Pour effectuer une action sur deux fichiers dans des répertoires différents, nous pouvons utiliser une extension d’accolade dans le chemin d’accès aux fichiers.

Dans cet exemple, le répertoire « brace » contient deux sous-répertoires, l’un appelé « nouveau » et l’autre appelé « ancien ». Ils contiennent différentes versions du même ensemble de fichiers de code source. Nous utiliserons le diff programme pour voir les différences entre les deux versions de « prog-1.c. »

diff brace/{new,old}/prog-1.c

Si vous disposez d’un squelette standard de répertoires que vous devez créer au début d’un projet, vous pouvez les créer rapidement à l’aide de l’expansion des accolades. Les mkdir -p option (parents) crée tous les répertoires parents manquants lorsqu’un répertoire enfant est créé.

mkdir -p {source,build,man,help{/pages,/yelp,/images}}
tree

Vous pouvez utiliser l’extension d’accolade avec wget à télécharger plusieurs fichiers.

Dans cette commande, nous allons télécharger des fichiers à partir de deux répertoires, appelés « test1 » et « test2 ». Chaque répertoire contient deux fichiers appelés « picture1 » et « picture2 ».

wget https://www.URL-of-your-choice.com/test{1,2}/picture{001,002}.jpg

La liste des fichiers vous montre les fichiers qui ont été récupérés et comment wget renomme les fichiers pour éviter les conflits de noms avec des fichiers existants.

ls picture*.*

Embrasser l’attelle

Il semble que l’extension des accolades soit un autre des secrets les mieux gardés de Linux. Beaucoup de gens me disent qu’ils n’ont jamais entendu parler de l’extension des accolades, tandis que d’autres m’informent que c’est l’une de leurs astuces de ligne de commande préférées.

Essayez-le et il pourrait bien trouver sa place dans votre ensemble d’astuces de ligne de commande.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Une femme utilisant un ordinateur portable Dell XPS 13 à un bureau.

Les meilleurs ordinateurs portables de 2021 pour le travail, le jeu et tout le reste

Accord SSD PNY

Obtenez notre SSD PS5 préféré de 4 To pour 130 $ de rabais