Чому розширення брекетів не підтримується?


9

Чи потрібно робити якусь конфігурацію, щоб розпочати розширення брекетів? Коли я бігаю mkdir {1..10}, це просто створює назву dir {1..10}.


mkdir {1..10}працює для мене, він створює десять дiрів.
підозрюваний

2
Раджу додати, echo ${SHELL}щоб зробити це питання здатним отримати корисну відповідь.
дан

Відповіді:


11

Незважаючи на те, що розширення брекетів, як видається, {1,2}починається в cshкінці 70-х років, і знайде свій шлях до снарядів Борна в bash/ zsh/ pdkshв кінці 80-х, початку 90-х, {n1..n2}варіант з'явився пізніше zshв 1995 році (2,6-бета4).

bashскопіював його у 2004 році (3.0) та ksh93у 2005 році ( ksh93r).

Можливо, оболонка, з якою ви намагаєтеся це, не є жодною з цих версій або є старішою версією bashта ksh93.


Нам слід сказати про те, яку оболонку шебанка він використовував. / я підозрюю, що це #!/bin/sh...
полем

3
@polemon, це не обов'язково допоможе. Наприклад, на деяких системах /bin/shє bashабо ksh93.
Стефан Шазелас

2
Я насправді думаю, що це було б: залежно від виклику, оболонки, на які посилається, /bin/sh виступають як історичні sh(це все одно, що говорить сторінка "bash man"). Не перевірено kshчоловічої сторінки, але я впевнений, що вона буде вести себе відповідно.
полемон

1
@ user43312: чому ви все ще використовуєте RH9? Це було бездоганне протягом багатьох-багатьох років. AS Stephane писав, що це особливість останніх версій bash. Тому малоймовірно, що ваша версія bash підтримує це. Ви можете перевірити версію за допомогою bash --version. І просто переконайтесь, що перевіряєте, чи використовуєте ви bash shell, перевіряючи змінну $ SHELL або просто запускаючи ps Щоб скористатися цією функцією, ви можете спробувати спочатку запустити zsh shell ( zsh). Іншим способом вирішення проблеми буде використання чогось типу "mkdir $ (seq 1 10)".
Брам

1
@polemon Поведінка запуску іншої оболонки (тобто, які файли її джерела при запуску), а не імітація іншої оболонки.
Кріс Даун

4

{x..y}Розширення діапазону дужок реалізовано в bash 3.0-alpha. Щоб допомогти нам і собі, покажіть свої echo "$BASH_VERSION"результати.

Тоді відповідь: Якщо mkdir {1..10}створюється dir з назвою, {1..10}тоді ви використовуєте bash версію до bash 3.0-alpha. У такому випадку ви можете використовувати для побудови циклу як:

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


1

Перевірте свою версію 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>

Також переконайтесь, що mkdirпсевдоніми не були дивним чином:

$ alias |grep mkdir
alias md='mkdir'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.