Почему расширение скобок не поддерживается?


9

Нужно ли делать какие-либо настройки, чтобы начать расширение скобки? Когда я бегу mkdir {1..10}, он просто создает имя dir {1..10}.


mkdir {1..10}работает для меня, создает десять режиссеров.
Подозреваемый

2
Советую добавить, echo ${SHELL}чтобы сделать этот вопрос способным получить полезный ответ.
дан

Ответы:


10

В то время как в фигурных скобках , как {1,2}берет свое начало в cshв конце 70 - х годов, и нашел свой путь к Bourne-подобных оболочек в bash/ zsh/ pdkshв конце 80 - х, начале 90-х годов {n1..n2}вариант пришел позже первым в zshв 1995 году (2,6-Beta4).

bashскопировал его в 2004 году (3.0) и ksh93в 2005 году ( ksh93r).

Вероятно, оболочка, в которой вы пытаетесь это сделать, не относится ни к одной из этих версий или к более старой версии bashи ksh93.


Нам следует выяснить, какую оболочку Шебанка он использовал. / Я подозреваю, что это #!/bin/sh...
Polemon

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

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

1
@ user43312: почему вы все еще используете RH9? Он не поддерживается на протяжении многих лет. AS Stephane написал, что это особенность последних версий bash. Так что маловероятно, что ваша версия Bash поддерживает это. Вы можете проверить версию, используя bash --version. И просто чтобы убедиться, что вы используете оболочку bash, проверьте переменную $ SHELL или просто запустите ps. Чтобы использовать эту функцию, вы можете сначала попытаться запустить оболочку zsh ( zsh). Другой обходной путь - использовать что-то вроде «mkdir $ (seq 1 10)».
Брэм,

1
@polemon Поведение при запуске другой оболочки (т. е. какие файлы она отправляет при запуске), а не подражание другой оболочке.
Крис Даун

4

{x..y}Расширение диапазона скобок реализовано в bash 3.0-alpha. Чтобы помочь нам и себе, пожалуйста, покажите свои echo "$BASH_VERSION"результаты.

Тогда ответ: Если mkdir {1..10}создает каталог с именем, {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.