Pourquoi l'extension d'accolade n'est pas prise en charge?

9

Dois-je effectuer une configuration pour démarrer l'expansion de l'accolade? Lorsque je cours mkdir {1..10}, il crée simplement un nom de répertoire {1..10}.

user43312
la source
mkdir {1..10}fonctionne pour moi, il crée dix dir.
suspectus
2
Je conseille d'ajouter echo ${SHELL}pour rendre cette question capable d'obtenir une réponse utile.
dan

Réponses:

10

Alors que l'expansion de l'orthèse comme à son {1,2}origine à cshla fin des années 70, et a trouvé son chemin vers des coquilles de type Bourne dans bash/ zsh/ pdkshà la fin des années 80, au début des années 90, la {n1..n2}variante est venue plus tard zshen 1995 (2.6-beta4).

bashcopié en 2004 (3.0) et ksh93en 2005 ( ksh93r).

Probablement le shell dans lequel vous essayez ceci n'est ni l'un ni l'autre ou une ancienne version de bashet ksh93.

Stéphane Chazelas
la source
Nous devrions savoir quel type de coquille de berge il a utilisé. / moi soupçonne que c'est #!/bin/sh...
polemon
3
@polemon, cela n'aiderait pas nécessairement. Par exemple, sur certains systèmes /bin/shest bashou ksh93.
Stéphane Chazelas
2
En fait, je pense que ce serait le cas: en fonction de l'invocation, les obus invoqués /bin/sh agissent comme l'historique sh(c'est ce que la page de manuel bash dit de toute façon). Je n'ai pas vérifié kshla page de manuel de, mais je suis sûr qu'elle se comportera en conséquence.
polemon
1
@ user43312: pourquoi utilisez-vous toujours RH9? Il n'est pas entretenu depuis de nombreuses années. COMME Stéphane l'a écrit, c'est une fonctionnalité des versions bash récentes. Il est donc très peu probable que votre version bash le supporte. Vous pouvez vérifier la version en utilisant bash --version. Et juste pour être sûr de vérifier si vous exécutez un shell bash en vérifiant la variable $ SHELL ou en exécutant simplement ps. Pour utiliser cette fonctionnalité, vous pouvez essayer de démarrer un shell zsh ( zsh) en premier. Une autre solution serait d'utiliser quelque chose comme "mkdir $ (seq 1 10)".
Bram
1
@polemon Le comportement de démarrage d'un autre shell (c'est-à-dire les fichiers qu'il source au démarrage), pas le mimétisme d'un autre shell.
Chris Down
4

{x..y}L'expansion de l'accolade de plage est implémentée dans bash 3.0-alpha. Pour nous aider et pour vous-même, veuillez montrer votre echo "$BASH_VERSION"résultat.

Ensuite, la réponse: si mkdir {1..10}crée un répertoire avec le nom, {1..10}vous utilisez une version bash antérieure bash 3.0-alpha. Dans ce cas, vous pouvez utiliser une construction de boucle for comme:

for ((i=1;i<=10; i++)); do mkdir "$i"; done

Valentin Bajrami
la source
1

Vérifiez votre version Bash:

$ bash -version
GNU bash, version 4.1.7(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

Vérifiez également qu'il mkdirn'y a pas eu d'alias d'une manière étrange:

$ alias |grep mkdir
alias md='mkdir'
slm
la source