Warum wird die Erweiterung der Zahnspange nicht unterstützt?


9

Muss ich eine Konfiguration vornehmen, um die Klammererweiterung zu starten? Wenn ich laufe mkdir {1..10}, wird nur eine Verzeichnisbenennung erstellt {1..10}.


mkdir {1..10}funktioniert bei mir, es entstehen zehn dirs.
suspectus

2
Ich empfehle hinzuzufügen echo ${SHELL}, damit diese Frage eine nützliche Antwort erhält.
Dan

Antworten:


10

Während Klammer Expansion wie {1,2}entsteht in cshin den späten 70er Jahren, und seine Art und Weise zu Bourne-wie Muscheln gefunden bash/ zsh/ pdkshEnde der 80er Jahre, Anfang der 90er Jahre, die {n1..n2}kam Variante später erstmals zshim Jahr 1995 (2,6-Beta 4).

bashkopierte es 2004 (3.0) und ksh932005 ( ksh93r).

Wahrscheinlich ist die Shell, in der Sie dies versuchen, keine von diesen oder eine ältere Version von bashund ksh93.


Wir sollten uns überlegen, welche Art von Shebank-Shell er verwendet hat. / Ich vermute, es ist #!/bin/sh...
Polemon

3
@polemon, das würde nicht unbedingt helfen. Zum Beispiel auf einigen Systemen /bin/shist bashoder ksh93.
Stéphane Chazelas

2
Ich denke tatsächlich, dass dies der Fall sein würde: Abhängig von der Aufforderung /bin/sh fungieren die aufgerufenen Shells als historische sh(das steht sowieso auf der Manpage von Bash). kshIch habe die Manpage nicht überprüft , aber ich bin sicher, dass sie sich entsprechend verhält.
Polemon

1
@ user43312: warum benutzt du immer noch RH9? Es ist seit vielen, vielen Jahren nicht mehr gepflegt. AS Stephane schrieb, es sei ein Feature der neuesten Bash-Versionen. Es ist daher sehr unwahrscheinlich, dass Ihre Bash-Version dies unterstützt. Sie können die Version mit bash --version überprüfen. Und um sicherzugehen, überprüfen Sie, ob Sie eine Bash-Shell ausführen, indem Sie die Variable $ SHELL überprüfen oder einfach ps ausführen. Um diese Funktion zu verwenden, können Sie zunächst versuchen, eine zsh-Shell ( zsh) zu starten . Eine andere Problemumgehung wäre, etwas wie "mkdir $ (seq 1 10)" zu verwenden.
Bram

1
@polemon Das Startverhalten einer anderen Shell (dh welche Dateien beim Start erstellt werden), nicht die Nachahmung einer anderen Shell.
Chris Down

4

{x..y}Die Erweiterung der Range Brace ist in Bash 3.0-Alpha implementiert. Um uns und Ihnen zu helfen, zeigen Sie bitte Ihre echo "$BASH_VERSION"Ausgabe.

Dann die Antwort: Wenn mkdir {1..10}ein Verzeichnis mit dem Namen erstellt {1..10}wird, verwenden Sie zuvor eine Bash-Version bash 3.0-alpha. In diesem Fall können Sie eine for-Schleifenkonstruktion verwenden als:

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


1

Überprüfen Sie Ihre Bash-Version:

$ 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>

Überprüfen Sie auch, ob es mkdirsich nicht um Aliase handelt:

$ alias |grep mkdir
alias md='mkdir'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.