2017-10-05 2 views
0

J'ai deux fichiers dans mon répertoire:Pourquoi foo {bar, baz} ne s'étend pas à "foobar" et "foobaz"?

com.my.arsys.core.js 
com.my.arsys.core-libs.js 

Maintenant, je veux les faire correspondre à l'aide modèle englobement (les accolades) et les copier dans a dossier donc j'exécutez la commande suivante:

cp com.my.arsys.{core, core-libs}.js a 

Cependant Je reçois les erreurs suivantes:

cp: cannot stat 'core,': No such file or directory 
cp: cannot stat 'core-libs,': No such file or directory 

Je pense que le problème est avec la syntaxe. quelqu'un peut-il aider s'il vous plait?

+3

BTW, ce n'est pas du tout un motif glob. Les modèles glob ne développent que les fichiers existants; l'expansion de l'accolade vous donne des résultats si les noms donnés existent en tant que fichiers ou non. Si vous exécutiez, disons, '{a, b} *. Txt', l'expansion de l'accolade donnerait deux résultats,' a * .txt' et 'b * .txt', et chacun d'entre eux serait alors étendu séparément un glob. –

+1

... cela signifie que, étant donné que l'exemple '{a, b} *. Txt', si vous avez' boo.txt' et rien qui commence par un 'a' et se terminant par' .txt', vous pourriez obtenir comme résultats 'a * .txt' et' boo.txt': Le glob qui a un résultat serait développé, celui qui ne le ferait pas. (Si la configuration d'exécution de votre shell a des options telles que 'failglob' ou' nullglob', ce comportement peut être modifié). –

+0

@CharlesDuffy, merci beaucoup pour la clafication! –

Répondre

2

Vous avez un vide supplémentaire, essayez:

cp com.my.arsys.{core,core-libs}.js a 

De l'homme bash à propos Brace Expansion:

Une expansion des accolades correctement formé doit contenir l'ouverture non cotés et des accolades de fermeture, et au moins une virgule sans guillemets ou une expression de séquence valide. Toute extension de contreventement incorrecte est laissée inchangée.