Comment utiliser l'extension Brace dans Linux Bash Shell

Contenu

Une fenêtre de terminal sur un système Linux.

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

Extension de pince

Avant la coquille de Bash exécuter une commande dans une fenêtre de terminal ou une ligne dans un script, vérifiez si vous devez effectuer une substitution dans 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 de clé est une forme d'extension prise en charge par Bash.

L'extension de la pince est activée sur les boîtiers modernes, mais il est possible qu'il manque dans certains cas anciens. Si vous allez utiliser l'expansion des accolades dans vos scripts, assurez-vous d'appeler un shell qui prend en charge l'extension de clé, comme 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 il offre certaines fonctionnalités qui peuvent économiser du temps et des frappes. Souvent, peut fournir une solution simple et élégante à un obstacle ou à une exigence.

Extensions simples

Une extension de clé est contenue entre une paire de clés “{}”. Peut être une liste d'éléments séparés par des virgules ou un spécificateur de plage. Aucun espace à l’intérieur des clés n’est autorisé, sauf si vous avez enveloppé la chaîne entre guillemets “". “

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

écho {une,deux,Trois,quatre}

Une liste peut être composée de mots ou de chiffres.

écho {1,2,3,4}

L'ordre des éléments dans la liste est absolument arbitraire.

écho (4,2,3,1)

une plage d’extension a un caractère de début et de fin relié à des deux-points ” .. "Sans aucun espace vide. L'extension fournit automatiquement tous les éléments de liste manquants, donc toute la plage est créée du caractère de début à la fin.

Cela imprimera les chiffres du 1 Al 10.

écho {1..10}

La numérotation est arbitraire. Vous n'êtes pas obligé de commencer par un.

écho {3..12}

Les plages peuvent être spécifiées pour s'exécuter en arrière. Cela générera une liste de cinq pour un.

écho {5..1}

Les plages peuvent inclure des nombres négatifs.

écho {4..-4}

Comme nous l'avons souligné précédemment, une gamme a un début et une fin personnage. Il ne doit pas s'agir d'un numéro. ça peut être une lettre.

écho {q..v}

Les lettres peuvent également revenir en arrière.

écho {f.. À}

Utilisation de l’expansion de corset en boucle

Vous pouvez utiliser l’extension de clé avec des plages en boucle dans les scripts.

pour i dans {3..7}
do
   echo $i
done

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

pour i dans {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 taper sur la ligne de commande pour voir ce qui se passe.

pour i dans {3..7}; faire écho $i; terminé

pour i dans {m..q}; faire écho $i; terminé

Concaténation et imbrication

Deux expansions adjacentes n’agissent pas indépendamment l’une après l’autre. Interopérabilité. Chaque élément de la première extension subit l'action de chaque élément de la seconde extension..

écho {q..v}{1..3}

Les extensions peuvent également être imbriquées. Une expansion imbriquée agira sur l'élément immédiatement précédent.

écho {partie 1, partie 2{une,b,c,ré},partie-3}

De plus, vous pouvez imbriquer des extensions en créant une liste délimitée par des virgules d'extensions de plage.

écho {{5..0},{1..5}}

Préambule et postface

Vous pouvez placer du texte avant et après une expansion d'accolade afin que ce texte soit inclus dans les résultats de l'expansion. Le texte placé devant une extension est appelé préambule, tandis que le texte placé derrière une extension d'accolade est appelé un post-scriptum.

Cette commande utilise un préambule.

chapitre d'écho{1..3}

Cet exemple utilise un post-scriptum:

écho {Contenu,papier,bilbiographie}.Maryland

Et cette commande utilise les deux.

chapitre d'écho-{1..4}.Maryland

Extension de répertoire et noms de fichiers

Comme vous l'avez probablement déjà deviné, l'une des principales utilisations des extensions d'accolades est de créer des noms de fichiers et de répertoires pouvant ê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'expansion des accolades avec elle.

Pour créer rapidement des fichiers, utilisation touch:

toucher fichier-{1..4}.SMS
ls *.txt

Si vous avez de nombreux fichiers avec le même nom de base mais des extensions de fichiers différentes et que vous souhaitez effectuer une opération sur un sous-ensemble d'entre eux, les extensions clés peuvent contribuer. Ici, nous compressons un sous-ensemble de fichiers qu’ils ont “Programme” comme nom de base dans un fichier ZIP nommé “code source.zip”.

les répertoires de développement contiennent de nombreux fichiers qui auront le même nom de base que leur programme principal. En général, vous ne souhaitez pas sauvegarder ou distribuer des fichiers en tant que fichiers objet “.O”. Il s’agit d’un moyen simple d’inclure uniquement les types de fichiers d’intérêt.

programme de code source zip{.c,.h,.css}

cette commande fera une copie d’un fichier et l’ajoutera “.Bak”, sauvegarde du fichier d’origine. Un point intéressant à prendre en compte est que l’extension clé 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/nouveau/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 clé dans le chemin d’accès aux fichiers.

Dans cet exemple, le répertoire “Accolade” contient deux sous-répertoires, un appelé “Nouveau” Doc2.docx “ancien”. Ils contiennent différentes versions du même ensemble de fichiers de code source. Nous utiliserons le diff pour voir les différences entre les deux versions de “prog-1.c.”

support de différentiel/{Nouveau,vieille}/prog-1.c

Si vous avez un squelette de répertoire standard que vous devez créer au début d'un projet, vous pouvez les créer rapidement en utilisant l'extension de clé. Les mkdir -p option (papa) créer des répertoires parents manquants lors de la création d'un répertoire enfant.

mkdir -p {la source,construire,homme,aider{/pages,/japper,/images}}
arbre

Vous pouvez utiliser l'extension de corset avec wget pour télécharger plusieurs fichiers.

Dans cette commande, nous allons télécharger des fichiers à partir de deux répertoires, appelé “test1” et “test2”. Chaque répertoire contient deux fichiers nommés “image1” e “image2”.

wget https://www.URL-de-votre-choix.com/test{1,2}/photo{001,002}.jpg

Lister les fichiers montre les fichiers qui ont été récupérés et comment wget renommer les fichiers pour éviter les conflits de noms avec les fichiers existants.

ls image*.*

Serrer la pince

Il semble que l'extension de clé soit un autre des secrets les mieux gardés de Linux. Beaucoup de gens me disent qu'ils n'ont jamais entendu parler d'extension de clé, 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 vous trouverez peut-être votre chemin dans votre ensemble d'astuces en ligne de commande.

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.