Je comprends ce qu'est l' extension du corset , mais je ne sais pas comment l'utiliser au mieux.
Quand l'utilisez vous?
S'il vous plaît, apprenez-moi quelques exemples pratiques et remarquables si vous avez votre propre astuce.
Je comprends ce qu'est l' extension du corset , mais je ne sais pas comment l'utiliser au mieux.
Quand l'utilisez vous?
S'il vous plaît, apprenez-moi quelques exemples pratiques et remarquables si vous avez votre propre astuce.
Réponses:
L'extension d'accolade est très utile si vous avez des noms de chemin longs. 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 . Je l'ai déjà 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
program
reçoit trois mots: "-f file1" "-f file2" "-f file3"
, au lieu de 6: "-f" "file1" "-f" "file2" "-f" "file3"
.
for
boucle est un peu inutile, car vous pouvez écrire for ((i=1; i<=100; i++))
et c'est plus efficace.
Le développement d'accolades est très utile lors de la création de grandes structures de répertoires:
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 pouvez même aller un peu plus loin et intégrer l’expansion d’attelle à son développement:
mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}
Cela vous donnera la même structure de répertoire que l'exemple ci-dessus.
mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}
) ne sert à rien. Vous auriez pu faire ceci: mkdir -p dir1/subdir{1,2}/subsubdir{1,2}
.
subdir1
et subdir2
dans un sens non littéral. Remplacer subdir1
par cat
et subdir2
avec dog
par exemple.
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 la différence entre la sortie de test (dans le fichier tests.output / 041) et la sortie souhaitée (dans le fichier tests.out / 041):
$ diff tests.{out,output}/041
Quelques cas fréquents pour moi sont:
Pour renommer:
mv myText.{txt,tex}
ou
mv myText.tex{,.old}
ou
cp myText.tex{,.backup}
(Bien que l'utilisation du contrôle de version pour les 2 dernières tâches soit moins compliquée.)
Pour comparer (déjà mentionné):
diff path{1,2}/a.txt
Il existe plusieurs bonnes réponses ici, mais aucune d’entre elles ne mentionne le moment où il ne faut pas utiliser l’expansion par attelle. Comme les autres répondeurs, j'utilise assez souvent le développement d'accolade sur la ligne de commande. Je l'utilise également dans mes alias et fonctions, car je peux m'attendre à un shell intelligent.
Je ne pas l' utiliser dans mes scripts shell (sauf si il y a une autre raison pour laquelle les scripts doivent être bash ou zsh, bien que dans ces cas, il est préférable de passer à un langage de script « réel » comme perl
ou python
). L’expansion de l’accolade n’est pas portable car elle n’est pas dans la norme du shell POSIX. Même si cela fonctionne dans vos /bin/sh
- Shebang scripts shell ed, il ne fonctionnera pas sur les systèmes avec plus dépouillées /bin/sh
coquilles (par exemple dash
).
Dans le cas d'une différence d'un chiffre, vous n'avez pas besoin d'expansion d'accolade; une classe de personnage suffira:
Bashisme:
diff file{1,2}
Portable:
diff file[12]
file{1,2}
les extensions de fichiers seront toujours étendues file1 file2
, alors file[12]
que les noms de fichiers existants seront étendus: c'est-à-dire que, s'ils file1
existent mais file2
ne le sont pas, file[12]
étendus file1
uniquement. L’ []
extension est en réalité une version restreinte de l’ ?
extension (on les appelle des «extensions de noms de chemins»).
program -f file1 -f file2 -f file3
, vous pouvez le faireprogram "-f file"{1..3}