¿Por qué no se admite la expansión de llaves?

9

¿Tengo que hacer alguna configuración para comenzar la expansión de llaves? Cuando ejecuto mkdir {1..10}, solo crea un nombre de directorio {1..10}.

usuario43312
fuente
mkdir {1..10}funciona para mí, crea diez directorios.
sospechoso
2
Aconsejo agregar echo ${SHELL}para hacer que esta pregunta pueda obtener una respuesta útil.
dan

Respuestas:

10

Si bien la expansión de los aparatos ortopédicos se {1,2}origina a cshfines de los años 70, y se abrió camino hacia las conchas tipo Bourne en bash/ zsh/ pdksha fines de los 80, principios de los 90, la {n1..n2}variante llegó primero zshen 1995 (2.6-beta4).

bashlo copié en 2004 (3.0) y ksh93en 2005 ( ksh93r).

Probablemente el shell en el que intentas esto no es ninguno de esos o es una versión anterior de bashy ksh93.

Stéphane Chazelas
fuente
Deberíamos saber qué tipo de caparazón shebank usó. / yo sospecha que es #!/bin/sh...
polemon
3
@polemon, eso no necesariamente ayudaría. Por ejemplo, en algunos sistemas /bin/shes basho ksh93.
Stéphane Chazelas
2
De hecho, creo que sería: dependiendo de la invocación, los shells invocados /bin/sh actúan como históricos sh(es lo que dice la página de manual de bash de todos modos). No he revisado kshla página del manual, pero estoy seguro de que se comportará en consecuencia.
polemon
1
@ user43312: ¿por qué sigues usando RH9? Se ha mantenido sin mantenimiento durante muchos años. AS Stephane escribió que es una característica de las versiones recientes de bash. Por lo tanto, es muy poco probable que su versión bash lo admita. Puede verificar la versión usando bash --version. Y solo para asegurarse, verifique si está ejecutando un shell bash verificando la variable $ SHELL o simplemente ejecutando ps. Para usar esta característica, puede intentar iniciar un shell zsh ( zsh) primero. Otra solución alternativa sería usar algo como "mkdir $ (seq 1 10)".
Bram
1
@polemon El comportamiento de inicio de otro shell (es decir, qué archivos obtiene en el inicio), no la imitación de otro shell.
Chris Down
4

{x..y}La expansión de llaves de rango se implementa en bash 3.0-alpha. Para ayudarnos a usted y a usted mismo, muestre su echo "$BASH_VERSION"resultado.

Luego la respuesta: si mkdir {1..10}crea un directorio con el nombre, {1..10}entonces está utilizando una versión bash anterior bash 3.0-alpha. En ese caso, puede usar una construcción de bucle for como:

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

Valentin Bajrami
fuente
1

Verifique su versión de 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>

También verifique que mkdirno haya habido alias de alguna manera extraña:

$ alias |grep mkdir
alias md='mkdir'
slm
fuente