Perché l'espansione del controvento non è supportata?


9

Devo eseguire una configurazione per avviare l'espansione del controvento? Quando corro mkdir {1..10}, crea solo un nome dir {1..10}.


mkdir {1..10}funziona per me, crea dieci dir.
suspectus,

2
Consiglio di aggiungere echo ${SHELL}per rendere questa domanda in grado di ottenere una risposta utile.
dan

Risposte:


10

Mentre l'espansione del rinforzo come ha {1,2}avuto origine cshalla fine degli anni '70 e ha trovato la sua strada verso le conchiglie simili a Bourne nella bash/ zsh/ pdkshalla fine degli anni '80, all'inizio degli anni '90, la {n1..n2}variante è arrivata prima zshnel 1995 (2.6-beta4).

bashcopiato nel 2004 (3.0) e ksh93nel 2005 ( ksh93r).

Probabilmente la shell in cui stai provando questo non è nessuno di questi o è una versione precedente di bashe ksh93.


Dovremmo sapere quale tipo di guscio di shebank ha usato. / io sospetto che sia #!/bin/sh...
polemon

3
@polemon, che non aiuterebbe necessariamente. Ad esempio, su alcuni sistemi /bin/shè basho ksh93.
Stéphane Chazelas,

2
In realtà penso che: a seconda dell'invocazione, le conchiglie invocate /bin/sh fungono da storico sh(è comunque ciò che dice la pagina man di bash). Non ho controllato kshla pagina man, ma sono sicuro che si comporterà di conseguenza.
polemon

1
@ user43312: perché stai ancora usando RH9? È stato mantenuto per molti anni. AS Stephane ha scritto che è una caratteristica delle recenti versioni bash. Quindi è molto improbabile che la tua versione bash lo supporti. Puoi controllare la versione usando bash --version. E per essere sicuro, controlla se stai eseguendo una shell bash controllando la variabile $ SHELL o semplicemente eseguendo ps. Per usare questa funzione potresti provare ad avviare prima una shell zsh ( zsh). Un'altra soluzione alternativa sarebbe usare qualcosa come "mkdir $ (seq 1 10)".
Bram,

1
@polemon Il comportamento all'avvio di un'altra shell (ad es. quali file genera all'avvio), non il mimetismo di un'altra shell.
Chris Down,

4

{x..y}L'espansione del range range è implementata in bash 3.0-alpha. Per aiutare noi e te stesso, ti preghiamo di mostrare i tuoi echo "$BASH_VERSION"risultati.

Quindi la risposta: se mkdir {1..10}crea una directory con il nome, {1..10}allora stai usando una versione bash precedente bash 3.0-alpha. In tal caso puoi usare una costruzione per il ciclo come:

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


1

Controlla la tua versione di 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>

Controlla anche che mkdirnon siano stati alias in qualche modo strano:

$ alias |grep mkdir
alias md='mkdir'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.